以下の一致クエリを使用してelasticsearchを検索していますが、完全一致ではなく、さらに重要でない一致も表示されます。
elasticsearch6.2.3を使用しています
以下の私の質問を見つけてください
get items/_search
{
"query" : {
"match" : {
"code" : "7000-8900"
}
}
}
match
クエリから取得している応答を見つけてください
7000-8900
7000-8002-WK
7000-8002-W
ドキュメントで説明されているように、match
の代わりに term
クエリを使用する必要があります。
用語クエリは、転置インデックスで指定された正確な用語を含むドキュメントを検索します
したがって、クエリを次のように変更する必要があります。
get items/_search
{
"query" : {
"term" : {
"code.keyword" : "7000-8900"
}
}
}
結果が得られない場合は、次の2つの可能性があります。
注:マッピングが正しく、コードが用語フィールドである場合は、「コード」を使用できます。マッピングが自動であり、マッピングがそれをテキストとして認識する場合は、「code.keyword」を使用する必要があります
このメソッドを試すことができます。このクエリは完全一致レコードを返します。
import json
from elasticsearch import Elasticsearch
es = Elasticsearch('http://localhost:9200')
res = es.search(index="test_index", doc_type="test_doc", body=json.dumps({"query": {"match_phrase": {"name": "Jhon"}}})))
試合でも同じ問題があったので、用語を使ってみました。しかし、それは悪い習慣です。 ESによると、文字列照合に用語を使用するべきではありません。
フィールドをキーワードとして指定した場合、一致はとにかく完全一致を行います。
フィールドをキーワードとして定義していない場合でも、次のようにクエリを実行できます。
get items/_search
{
"query" : {
"match" : {
"code.keyword" : "7000-8900"
}
}
}