ドキュメントに表示される正確なフレーズの重要性を高めるためにelasticsearchに方法はありますか?
たとえば、「web 開発者」という語句を検索していて、「web 開発者」という単語が一緒に表示された場合、ドキュメント全体で「web」と「開発者」が別々に表示される場合と比較して、5 倍になります。これにより、「Web 開発者」を一緒に含むドキュメントが結果の最初に表示されます。
ドキュメントに表示される正確なフレーズの重要性を高めるためにelasticsearchに方法はありますか?
たとえば、「web 開発者」という語句を検索していて、「web 開発者」という単語が一緒に表示された場合、ドキュメント全体で「web」と「開発者」が別々に表示される場合と比較して、5 倍になります。これにより、「Web 開発者」を一緒に含むドキュメントが結果の最初に表示されます。
bool queryを使用して異なるクエリを組み合わせることができ、それらに異なるブーストを割り当てることもできます。位置に関係なく、両方の用語に対して通常の一致クエリがあり、次に、より高いブーストを持つフレーズ クエリがあるとします。
次のようなもの:
{
"query": {
"bool": {
"should": [
{
"match": {
"field": "web developer"
}
},
{
"match_phrase": {
"field": "web developer",
"boost": 5
}
}
],
"minimum_number_should_match": 1
}
}
}
javanaの答えの代わりに、クエリ内でmust
andshould
句を使用して同様のことを行うことができます。bool
{
"query": {
"bool": {
"must": {
"match": {
"field": "web developer",
"operator": "and"
}
},
"should": {
"match_phrase": {
"field": "web developer"
}
}
}
}
}
テストされていませんが、ここの句は「web」と「developer」の両方must
を含む結果に一致し、句は「web developer」に一致する句のスコアを高くすると思います。should
rescore を使用して、最初の結果に対して正確なフレーズ一致を実行してみてください。ドキュメントから:
「再スコアリングは、インデックス内のすべてのドキュメントにコストのかかるアルゴリズムを適用するのではなく、セカンダリ (通常はよりコストのかかる) アルゴリズムを使用して、クエリおよび post_filter フェーズによって返された上位 (たとえば、100 ~ 500) のドキュメントのみを並べ替えることにより、精度を向上させるのに役立ちます。 "
https://www.elastic.co/guide/en/elasticsearch/reference/current/filter-search-results.html#rescore
私の場合、以下のサンプルクエリを使用しましたが、これは機能しています。正確な結果とあいまいな結果が得られますが、正確な結果がブーストされます!
{ "query": {
"bool": {
"should": [
{
"match": {
"name": "pala"
}
},
{
"fuzzy": {
"name": "pala"
}
}
]
}}}
デフォルトの動作は、一致クエリの「または」演算子で既に行われていると思います。最初に「web 開発者」という語句をフィルター処理し、次に「web」や「開発者」などの語句をフィルター処理します。上記の回答を使用してクエリを後押しすることはできますが。私が間違っている場合は修正してください。