matchQuery
JavaでElasticsearchをクエリするためにを使用しています。以下は私の質問です:
sourceBuilder.query(QueryBuilders.matchQuery("TransactionId_s","BulkRunTest.20Nov20201446.00"));
フィールドTransactionId_s
はではありませんkeyword
。そして、matchQueryが指定した文字列と正確に一致し、結果を返すことを期待しています。ElasticsearchにTransactionId_s
asのドキュメントはありませんBulkRunTest.20Nov20201446.00
。しかし、私はいくつかの結果を得ています、そしてそれらはTransactionId_s
以下のようなものを持っています:
"TransactionId_s" : "BulkRunTest.17Sep20201222.00"
"TransactionId_s" : "BulkRunTest.22Sep20201450.00"
"TransactionId_s" : "BulkRunTest.20Sep20201250.00"
のtermQuery
代わりにを使用しようとすると、matchQuery
0の結果が得られます。これは、期待される結果です。matchQuery
トークン化について心配することなく、指定された値の任意のフィールドにクエリを実行できると思いました。私が間違っている?そして、私が見ている問題をどのように解決しますか?
どんな助けでも大歓迎です。ありがとうございました。
Match
クエリが分析されます。つまり、インデックス作成時にフィールドで使用されているのと同じアナライザーが適用されます。APIを分析して、インデックス付きのトークンと検索語を確認できます。
text
デフォルトのアナライザー(標準)を持つフィールドがあることを考慮すると、検索語に対して以下のトークンが生成されますBulkRunTest.20Nov20201446.00
POST /_analyze
{
"analyzer" : "standard",
"text" : "BulkRunTest.20nov20201446.00"
}
そして生成されたトークン
{
"tokens": [
{
"token": "bulkruntest", // notice this token
"start_offset": 0,
"end_offset": 11,
"type": "<ALPHANUM>",
"position": 0
},
{
"token": "20nov20201446.00",
"start_offset": 12,
"end_offset": 28,
"type": "<ALPHANUM>",
"position": 1
}
]
}
次に、一致ドキュメントの1つのトークンを確認しましょう BulkRunTest.17Sep20201222.00
POST /_analyze
{
"analyzer" : "standard",
"text" : "BulkRunTest.17Sep20201222.00"
}
そして生成されたトークン
{
"tokens": [
{
"token": "bulkruntest", // notice same token
"start_offset": 0,
"end_offset": 11,
"type": "<ALPHANUM>",
"position": 0
},
{
"token": "17sep20201222.00",
"start_offset": 12,
"end_offset": 28,
"type": "<ALPHANUM>",
"position": 1
}
]
}
ご覧のとおりbulkruntest
、インデックス付きの用語と検索用語の両方で同じトークンであるため、一致クエリは検索結果を返し、別のインデックス付きドキュメントでも同じです。
デフォルトの自動生成されたマッピングを.keyword
使用し、サブフィールドがある場合は、その.keyword
フィールドを使用して正確な検索を行うことができます。
実例
{
"query": {
"term": { // term query
"TransactionId_s.keyword": { // .keyword subfield is used
"value": "BulkRunTest.20Nov20201446.00"
}
}
}
}
そして検索結果
"hits": [
{
"_index": "test_in",
"_type": "_doc",
"_id": "2",
"_score": 0.6931471,
"_source": {
"TransactionId_s": "BulkRunTest.20Nov20201446.00"
}
}
]
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加