ブール演算子(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"
]
}
}
]
}
}
}
これはデフォルトの状況で、私は人が 'fir'を入力し、' fire'や他の言葉は似て取得できるようにしたいと思いますので、私は、のためにつもりはかなりものではありません。しかし、クエリに '*'を追加すると答えがうまくいくので、私は 'fire -b * 'を受け入れ可能なクエリとして扱うことができると思います。したがって接頭辞は一致させますが、 '*'は特にNOT句の問題を解決します。 – IronWaffleMan
両方の用語にワイルドカードを追加できます。 'fir'の例では' 'query '':' fir * '' – alkis
です。これがあなたの問題を解決した場合には、答えとしてマークすることを忘れないでください。 – alkis