ES的新手可能是一个愚蠢的问题,但我正在尝试使用通配符进行搜索,例如:"SOMECODE*"
和"*SOMECODE"
它工作正常,但文档中的值可能为"SOMECODE/FRED"
问题是*
将与任何内容(包括任何内容)匹配
*SOMECODE
会SOMECODE/FRED
点击*/SOMECODE
。
我尝试搜索/
,但这不会返回任何内容
我认为该领域的标记化是根本问题
即,not_analyzed
导致该值为2个单词。
我尝试将字段上的地图设置为{{1}},但之后我根本无法搜索它。
我做错了吗?
由于
答案 0 :(得分: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
} ]
}
如果您不想要此行为,则需要更改为不分割特殊字符的标记生成器。但是,我会质疑用例。通常,您需要拆分这些类型的字符。