我的字段包含具有以下结构<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
)才会这样做。是否有一种方法可以将弹性搜索配置为停止将连字符解释为NOT,或者在没有前缀空格时停止在连字符上拆分?或者是我可以通过分析仪影响的东西?
我不知道这是否会影响答案,但我也希望能够搜索同一查询中的其他字段。例如。类似于foo-1.0 OR bar
。
非常感谢您的帮助。
格雷厄姆。
答案 0 :(得分:1)
您可以使用反斜杠-
(或使用JSON双反斜杠\
\\
搜索
"foo\\-1.0"
答案 1 :(得分:0)
curl -XPUT http://localhost:9200/index_name -d '{
"mappings" : {
"type_name" : {
"properties" : {
"field_name" : { "type": "string", "index" : "not_analyzed" }
}
}
}
}'
之后您可以使用术语查询或查询字符串。