1

Tire/ElasticSearch を使用して、データベース内のすべてのタグのアルファベット順のブラウズを作成しています。ただし、タイヤ検索では、同じアイテムに関連付けられている他のすべてのタグだけでなく、必要なタグも返されます。たとえば、私の手紙が「A」で、アイテムに「aardvark」と「biscuit」というタグが付いている場合、「aardvark」と「biscuit」の両方が「A」クエリの結果として表示されます。「ツチブタ」のみを取得するようにこれを構築するにはどうすればよいですか?

 def explore
 #get alphabetical tire results with term and count only

    my_letter = "A"

    self.search_result = Tire.search index_name, 'tags' => 'count' do 
      query {string 'tags:' + my_letter + '*'}
        facet 'tags' do
          terms 'tags', :order => 'term'
      end

    end.results  
  end

マッピング:

{
    items: {
        item: {
            properties: {
                tags: {
                    type: "string",
                    index_name: "tag",
                    index: "not_analyzed",
                    omit_norms: true,
                    index_options: "docs"
                  },
              }
           }
       }
   }
4

1 に答える 1

2

次の変更が必要です。

  1. マッピング タグを検索するには、タグを適切にマッピングする必要があります。また、タグはアイテム ドキュメント内にあるため、ファセットにも検索クエリを適用できるように、タグのプロパティをネストされたものとして設定する必要があります。設定する必要があるマッピングは次のとおりです。

    {
      item: {
        items: {
          properties: {
            tags: {
              properties: {
                 type: "nested",
                 properties: {
                    value: {
                    type: "string",
                    analyzer: 'not_analyzed'
                    }
                 }
              }
           }
         }
       }
      }
    }
    
  2. クエリ これで、プレフィックス クエリを使用して、特定の文字で始まるタグを検索し、ファセットを取得できます。完全なクエリは次のとおりです。

    クエリ: {
      入れ子: {
        パス: "タグ",
        クエリ: {
          プレフィックス: {
            'tags.value': 'A'
          }
        }
      }
    }
    ファセット: {
      言葉: {
        用語: {フィールド: 'tags.value'},
        タイプ: '入れ子',
        facet_filter: {プレフィックス: {
                                 'tags.value': 'A'
                               }
                       }
      }
    }
    

ファセットの計算中にファセット フィルターが適用されるため、条件に一致するファセットのみが取得されます。通常の exp よりもプレフィックス クエリを優先しました。パフォーマンスの問題のため、クエリを実行できません。しかし、プレフィックス クエリが問題に対して機能するかどうかはよくわかりません。うまくいかないことを教えてください。

于 2013-11-06T06:17:10.860 に答える