我有一個帶有標準分析器的 elasticsearch 集群。我知道使用此分析器將術語“300”分析為一種型別。
假設我正在搜索一個欄位“名稱”的檔案,其值為“紙巾 300 CT”,該檔案被分析為 [“paper”(ALPHANUM), “towel”(ALPHANUM), “300”(NUM), “ct” (字母)]
目前,當我使用這樣的模糊/通配符查詢時:
"query":
{
"bool":{
"must":[
{
"bool":{
"should":[
{
"fuzzy":{
"ec_item_name":{
"value":"300CT"
}
}
},
{
"wildcard":{
"ec_item_name":{
"value":"3*0*0*C*T*"
}
}
}
],
"minimum_should_match": 1
}
}
]
}
}
無論模糊度如何調整,模糊查詢都不匹配。我希望“300CT”一詞與“300”相匹配。在“300CT”上匹配“300”也是如此。是否有分析器或實作自定義分析器的方法,以便分析所有術語以支持此類搜索?我在查找有關此類行為的檔案時遇到了一些麻煩。
uj5u.com熱心網友回復:
您是否嘗試過match查詢和fuzziness選項?
我已經嘗試過使用standard分析儀,它對我來說很好用:
{
"query": {
"match": {
"name": {
"query": "300CT",
"fuzziness": 2
}
}
}
}
uj5u.com熱心網友回復:
小心的模糊查詢,它并沒有分析搜索產生的模糊替代查詢詞之前的查詢文本。有一篇很好的文章解釋了Elastic Blog 上的模糊查詢,關于他們陳述的模糊查詢:
通常應避免使用 elasticsearch 模糊查詢型別。
也就是說,我無法重現您的示例,因為當我使用模糊度 2 進行搜索時,術語 300CT 與 300 匹配。在 Kibana Dev Tools 中嘗試以下示例:
PUT fuzzytest
PUT fuzzytest/_doc/1
{
"name": "Paper towel 300 CT"
}
POST fuzzytest/_explain/1
{
"query": {
"fuzzy": {
"name": {
"value": "300CT",
"fuzziness": 2
}
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/343274.html
