Jon*_*sie 10 wildcard elasticsearch
ES的新手可能是一个愚蠢的问题,但我试图使用通配符进行搜索,例如: "SOMECODE*"
和"*SOMECODE"
它工作正常,但文档中的值可能有"SOMECODE/FRED"
.
问题是*
与任何东西(包括什么都没有)匹配.
*SOMECODE
会受到打击SOMECODE/FRED
.
我试着寻找,*/SOMECODE
但这没有回报.
我认为该字段的标记化是根本问题.
即,/
使值为2个单词.
我尝试在场上设置地图not_analyzed
,但后来我根本无法搜索它.
我做错了吗?
谢谢
Zac*_*ach 14
通过设置not_analyzed
,您只允许完全匹配(例如,"SOMECODE/FRED"
仅包括大小写和特殊字符).
我的猜测是你正在使用标准分析仪(如果你没有指定分析仪,它是默认的分析仪).如果是这种情况,Standard会将斜杠视为标记分隔符,并生成两个标记,[somecode]
并且[fred]
:
$ curl -XGET 'localhost:9200/_analyze?analyzer=standard&pretty' -d 'SOMECODE/FRED'
{
"tokens" : [ {
"token" : "somecode",
"start_offset" : 0,
"end_offset" : 8,
"type" : "<ALPHANUM>",
"position" : 1
}, {
"token" : "fred",
"start_offset" : 9,
"end_offset" : 13,
"type" : "<ALPHANUM>",
"position" : 2
} ]
}
Run Code Online (Sandbox Code Playgroud)
如果您不想要此行为,则需要更改为不分割特殊字符的标记生成器.但是,我会质疑用例.通常,您需要拆分这些类型的字符.
归档时间: |
|
查看次数: |
12181 次 |
最近记录: |