2016-10-18 20 views
2

ブール演算子(as described here)を使用する検索フィールドを作成していて、prefix_matchの部分文字列に一致する通常の(ブール演算子以外の)クエリと同じように動作させます。例:firを検索し、fire pit,fire ball,firmなどの結果を得ます。しかし、fire -bを検索すると、それでもまだfire ballが返されます。これは間違っていると考えられます。私はfire -ballを検索してfire ballを除外しなければなりません。この動作を変更する方法はありますか?参考のためElasticsearch QueryStrings:部分的にNOTクエリに一致しますか?

、これは現在、ESサーバーに送信されたクエリです:

{ 
 
    "query": { 
 
    "bool": { 
 
     "should": [ 
 
     { 
 
      "queryString": { 
 
      "fields": [ 
 
       "name" 
 
      ], 
 
      "query": "fire -b", 
 
      "defaultOperator": "OR" 
 
      } 
 
     }, 
 
     { 
 
      "multi_match": { 
 
      "query": "fire -b", 
 
      "type": "phrase_prefix", 
 
      "fields": [ 
 
       "name" 
 
      ] 
 
      } 
 
     } 
 
     ] 
 
    } 
 
    } 
 
}

答えて

3

Query Stringクエリは、ワイルドカードを可能にします。私はあなたがmultimatchを削除する必要がありますと信じています。私はあなたの結果を混乱させると信じて、以下のようにすべての言葉の終わりにワイルドカードを追加するだけです。正確に一致するものが必要な場合は、ワイルドカードを追加しないでください。さらに、このクエリはfuzzinessをサポートしています。デフォルトではAUTOに設定されています。無効にする場合は、ゼロに設定してください。

{ 
    "query": { 
    "bool": { 
     "should": [ 
     { 
      "queryString": { 
      "fields": [ 
       "name" 
      ], 
      "query": "fire* -b*", 
      "defaultOperator": "OR" 
      } 
     } 
     ] 
    } 
    } 
} 
+0

これはデフォルトの状況で、私は人が 'fir'を入力し、' fire'や他の言葉は似て取得できるようにしたいと思いますので、私は、のためにつもりはかなりものではありません。しかし、クエリに '*'を追加すると答えがうまくいくので、私は 'fire -b * 'を受け入れ可能なクエリとして扱うことができると思います。したがって接頭辞は一致させますが、 '*'は特にNOT句の問題を解決します。 – IronWaffleMan

+0

両方の用語にワイルドカードを追加できます。 'fir'の例では' 'query '':' fir * '' – alkis

+0

です。これがあなたの問題を解決した場合には、答えとしてマークすることを忘れないでください。 – alkis

関連する問題