3

ElasticSearch (elasticsearch-dsl) を使用してキーワードを検索していますが、検索からいくつかのフレーズを無視したいと考えています。たとえば"best"、フレーズを検索して無視すると、"best regards"「The Car bla-bla-bla Best Regards」というドキュメントが見つかるはずBestですが (最初の一致は正しく、2 番目の一致は無視されます)、「Bla-bla-bla Best Regards」には一致しません。理想的には、ignore フレーズに単語を含まない実際の一致のみを強調表示する必要もあります。2 つのクエリをキックしてから、実際の検索から無視フレーズの結果を削除することを考えています。一致したトークンのリストとその位置を取得することは何とか可能ですか? または、より良いアプローチはありますか?検索は動的であり、無視フレーズはユーザーごとに異なるため、ストップ フレーズをインデックスに追加できません。

4

1 に答える 1

1

あなたのアプローチを完全に理解しているかどうかはわかりませんが、正確なフレーズ一致と組み合わせてはならないクエリをクエリに追加したいようです。次のようになります。

{
  "query": {
    "bool" : {
      "must" : {
        "term" : { "text_field" : "best" }
      },
      "must_not" : {
        query_string: {default_field: "text_field", query: '\"best regards\"'}
      },
   }
}

文字列構文を除外する複数のフレーズがある場合:

'\"text"\ OR \"text1"\ OR ... \"textn\"'

また、elasticsearchカスタム アナライザーがどれほど強力であるかを理解するのに少し時間がかかりました。データがどのように表示され、何が必要なのか正確にはわかりませんが、まだ調べていない場合は、調べてみると、多くの節約になる可能性があります。問題を解決し、クエリをより効率的にします。

于 2019-04-22T18:51:04.583 に答える