對于我正在搜索的特定屬性,似乎需要一個最小字符才能通過 elasticsearch 獲得結果。它被稱為“guid”并具有以下配置:
"guid": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
我有一個帶有以下 GUID 的檔案:3e49996c-1dd8-4230-8f6f-abe4236a6fc4
以下查詢按預期回傳檔案:
{"match":{"query":"9996c-1dd8*","fields":["guid"]}}
但是,此查詢不會:
{"match":{"query":"9996c-1dd*","fields":["guid"]}}
我對 multi_match 和 query_string 查詢有相同的結果。我無法在檔案中找到有關字符最小值的任何內容,那么這里發生了什么?
uj5u.com熱心網友回復:
Elastic 不需要最少字符數。重要的是生成的令牌。
一個有助于理解的練習是使用 _analyzer 查看您的索引標記。
GET index_001/_analyze
{
"field": "guid",
"text": [
"3e49996c-1dd8-4230-8f6f-abe4236a6fc4"
]
}
您指出術語 3e49996c-1dd8-4230-8f6f-abe4236a6fc4。看看令牌是怎樣的:
"tokens" : [
{
"token" : "3e49996c",
"start_offset" : 0,
"end_offset" : 8,
"type" : "<ALPHANUM>",
"position" : 0
},
{
"token" : "1dd8",
"start_offset" : 9,
"end_offset" : 13,
"type" : "<ALPHANUM>",
"position" : 1
},
{
"token" : "4230",
"start_offset" : 14,
"end_offset" : 18,
"type" : "<NUM>",
"position" : 2
},
{
"token" : "8f6f",
"start_offset" : 19,
"end_offset" : 23,
"type" : "<ALPHANUM>",
"position" : 3
},
{
"token" : "abe4236a6fc4",
"start_offset" : 24,
"end_offset" : 36,
"type" : "<ALPHANUM>",
"position" : 4
}
]
執行搜索時,將在搜索中使用與索引相同的分析器。當您搜索術語“9996c-1dd8*”時。
GET index_001/_analyze
{
"field": "guid",
"text": [
"9996c-1dd8*"
]
}
生成的令牌是:
{
"tokens" : [
{
"token" : "9996c",
"start_offset" : 0,
"end_offset" : 5,
"type" : "<ALPHANUM>",
"position" : 0
},
{
"token" : "1dd8",
"start_offset" : 6,
"end_offset" : 10,
"type" : "<ALPHANUM>",
"position" : 1
}
]
}
請注意,倒排索引將具有標記 1dd8 并且術語“9996c-1dd8*”生成標記“1dd8”,因此匹配發生了。
當您使用術語“9996c-1dd*”進行測驗時,沒有標記匹配,因此沒有結果。
GET index_001/_analyze
{
"field": "guid",
"text": [
"9996c-1dd*"
]
}
代幣:
{
"tokens" : [
{
"token" : "9996c",
"start_offset" : 0,
"end_offset" : 5,
"type" : "<ALPHANUM>",
"position" : 0
},
{
"token" : "1dd",
"start_offset" : 6,
"end_offset" : 9,
"type" : "<ALPHANUM>",
"position" : 1
}
]
}
令牌“1dd”不等于“1dd8”。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/463949.html
上一篇:elasticsearch中允許的最大索引數是多少?
下一篇:DISTINCT值DSL查詢
