2016-08-24 5 views
3

私は弾性検索が初めてです。私は私たちのデータのための最適なクエリを見つけるために少し苦労しています。match_phrase_prefixとfuzzinessを同時に使用した弾性検索クエリですか?

私は次の単語 "Handelsstandens Boldklub"にマッチしたいと考えています。

{ 
    query: { 
     bool: { 
     should: [ 
      { 
      match: { 
       name: { 
       query: query, slop: 5, type: "phrase_prefix" 
       } 
      } 
      }, 
      { 
      match: { 
       name: { 
       query: query, 
       fuzziness: "AUTO", 
       operator: "and" 
       } 
      } 
      } 
     ] 
     } 
    } 
    } 

私は「手」を探していますが、私は「ハンドル」を検索すると単語がもはや表示されないことになる場合には、現在の単語をリスト:現在、私は次のクエリを使用してい

私がタイプミスをしたように。しかし、 "Handlesstandens"で終わりに達すると、それは、あいまいさがタイプミスをキャッチするので、私が単語全体をタイプしたときだけ、再びリストされます。

phrase_prefixとfuzzinessを同時に行うことはどういうことですか?だから上のケースでは、途中でタイプミスをしても、それでも単語がリストされますか?

この場合、「Handle」を検索すると、「Handelsstandens Boldklub」という単語と一致します。

上記のエクスペリエンスを達成するための他の回避策はありますか?私はphrase_prefixのマッチングが嫌いです。そのため、 "Boldklub han"を検索すると結果が表示されます。

完了スグジッタを使用して上記を達成できますか?

答えて

0

それでは、elasticsearchを調べた後、私はngramを使うべきだという結論に達しました。

ここでは、実際の動作と動作について説明します。ここで https://qbox.io/blog/an-introduction-to-ngrams-in-elasticsearch

私が使用した設定とマッピングである:(これはelasticsearchレールの構文です)

settings analysis: { 
    filter: { 
    ngram_filter: { 
     type: "ngram", 
     min_gram: "2", 
     max_gram: "20" 
    } 
    }, 
    analyzer: { 
    ngram_analyzer: { 
     type: "custom", 
     tokenizer: "standard", 
     filter: ["lowercase", "ngram_filter"] 
    } 
    } 
} do 
    mappings do 
    indexes :name, type: "string", analyzer: "ngram_analyzer" 
    indexes :country_id, type: "integer" 
    end 
end 

と問合せ:(このクエリは実際には同時に2つの異なるインデックスで検索)

{ 
    query: { 
     bool: { 
     should: [ 
      { 
      bool: { 
       must: [ 
       { match: { "club.country_id": country.id } }, 
       { match: { name: query } } 
       ] 
      } 
      }, 
      { 
      bool: { 
       must: [ 
       { match: { country_id: country.id } }, 
       { match: { name: query } } 
       ] 
      } 
      } 
     ], 
     minimum_should_match: 1 
     } 
    } 
    } 

しかし、基本的に、あなたはちょうどあなたがで検索するどのように多くの分野に応じて、一致またはマルチ一致クエリを行う必要があります。

誰かが助けてくれることを願っています。私が個人的にはngramsの代わりにあいまいさを考えていたので(以前は分かりませんでした)。これは間違った方向に私を導いた。

関連する問題