2017-11-16 21 views
1

文字列をフィールドに一致させようとしていて、曖昧さを適用したいだけです。例えば括弧で囲まれた文字列と一致する文字列

は、これらの文書で:

{ title: "replace oilfilter" }, { title: "replace motoroil" } 

次のクエリは、最初の文書だけ一致する必要があります:

"Replace oilfilter", "Replace oilsfilter", "Replaze oilfilter" 

を次のクエリは、は、任意のドキュメントに一致するべきではありません:

"replace", "oilfilter", "motoroil" 

私がこれまでに得たことは、 lowing:それは、単一の単語として(可能性)というフレーズを見ているので、私はキーワードアナライザを使用してい

インデックス、「置き換え」を検索する際には、ドキュメントと一致していませんが、それが見つからないこの方法正確な用語「オイルフィルターを交換する」を検索する際に文書化してください。

"mappings": { 
     "blacklist": { 
      "properties": { 
       "title": { 
        "type": "text", 
        "analyzer": "keyword" 
       } 
      } 
     } 
    } 

検索

私は文書を検索するために複数のクエリを試してみました。結果である

"query": { 
     "query_string": { 
      "default_field": "title", 
      "fuzziness": "3", 
      "query": query 
     } 
    } 

結果

以下、このクエリを使用して:私は、次のクエリで親しま

が結果はそれほど悪くはありません

> "Replace oilfilter" (exact words) 
< doc: { title: "replace oilfilter" }, score: 0.5753.. 
< doc: { title: "replace motoroil" }, score: 0.2876.. 

> "Replace iolfilter" (typo) 
< doc: { title: "replace oilfilter" }, score: 0.2876.. 

> "oilfilter" (other term) 
< doc: { title: "replace oilfilter" }, score: 0.2876.. 

問題が、私はより正確なスコアが必要です。シンプルなタイプミスの2番目のクエリは、最初のクエリの2番目の結果と3番目のクエリの唯一の結果よりもスコアが高くなります。私が達成しようとしている何

は、私はキーワードアナライザを使用している理由です、それは文書で全体フィールドに対する全体クエリと一致していることです。その上に私はいくつかの曖昧さを適用したいだけです。

誰かがこの問題についていくつかの光を当ててくれることを願っています。

ありがとうございます!

答えて

1

次の検索は、あなたが望むものを達成する必要があります

{ 
    "query": { 
     "bool": { 
     "must": { 
      "multi_match": { 
      "query": "replace oilfliter", 
      "fuzziness": "3", 
      "fields": [ 
       "title" 
      ], 
      "minimum_should_match": "75%", 
      "type": "most_fields" 
      } 
     } 
     } 
    } 
} 

あなたは関係なく、クエリ文字列がどのくらいのすべてのクエリ条件に一致する必要はありませんしたい場合は、minimum_should_match 100%に増やすことができます。

+0

完璧!スコアは今より良くなり、一致する単語とあいまいさの組み合わせのように見えます。しかし、私は "bool"と "must"クエリを削除することができます、これは私に同じ結果を与える..あなたはなぜ知っているのですか? "bool"、 "must"、 "multi_match"の組み合わせの目的は何ですか?ありがとう! –

+0

私はブールと思うが、私が使っていたより大きい検索の残党であるに違いありません。フレーズクエリの一致を強化するために検索に余分なセクションを追加すると、必須コンポーネントは「必須」ステージをパスした結果のサブセットにフレーズ一致が適用される前に、プレフィルタのように少し機能します。あなたの場合はこれを削除することができます。マルチ・マッチはまた、もしあなたが望むのであれば、「タイトル」だけでなく、追加のフィールド上で検索を実行できることを意味します。 – LaserJesus

+0

@TimBaasこれがあなたの質問に答えた場合、回答をアップアップ/授与することを検討してください。ありがとう。 – LaserJesus

関連する問題