我有一个字段,其中包含具有以下结构的名称<name>-<version>
(例如foo-1.0
)。
我有以下分析仪配置:
"settings": {
"index": {
"analysis": {
"analyzer": {
"default": {
"type": "snowball",
"language": "English"
}
}
}
}
以及以下映射:
"itemName": {
"type": "multi_field",
"fields": {
"itemName": {
"type": "string",
"index": "analyzed"
},
"untouched": {
"type": "string",
"index": "not_analyzed"
}
}
},
我希望能够搜索foo-1.0
而不必引用它。从用户反馈来看,这是他们期望能够做到的,但不幸的是,foo-1.0
被解释为foo NOT 1.0
。我知道连字符等同于NOT
,但我天真地认为只有在前面加一个空格(例如foo -1.0
)的情况下它才会这样做。有没有一种方法可以配置elasticsearch来停止将连字符解释为NOT,或者在没有空格前缀的情况下停止在连字符上拆分?还是我可以通过分析器影响它?
我不知道这是否会影响答案,但我也希望能够在同一查询中搜索其他字段。例如foo-1.0 OR bar
之类的东西。
非常感谢您的帮助。
格雷厄姆。
您可以用反斜杠转义
-
(或者使用JSON双反斜杠\
时
搜索
"foo\-1.0"
curl -XPUT http://localhost:9200/index_name -d '{
"mappings" : {
"type_name" : {
"properties" : {
"field_name" : { "type": "string", "index" : "not_analyzed" }
}
}
}
}'
之后可以使用查询或查询字符串。