ElasticSearch-使用连字符搜索
弹性搜寻1.6
我想索引包含连字符的文本,例如U-12,U-17,WU-12,T恤…,并能够使用“简单查询字符串”查询来搜索它们。
数据样本(简体):
{"title":"U-12 Soccer", "comment": "the t-shirts are dirty"}
所以我去了这个映射:
{ "settings":{
"analysis":{
"char_filter":{
"myHyphenRemoval":{
"type":"mapping",
"mappings":[
"-=>"
]
}
},
"analyzer":{
"default":{
"type":"custom",
"char_filter": [ "myHyphenRemoval" ],
"tokenizer":"standard",
"filter":[
"standard",
"lowercase"
]
}
}
}
},
"mappings":{
"test":{
"properties":{
"title":{
"type":"string"
},
"comment":{
"type":"string"
}
}
}
}
}
使用以下查询进行搜索:
{"_source":true, "query":{
"simple_query_string":{
"query":"<Text>",
"default_operator":"AND"
}
}
}
- 什么有效:
“ U-12”,“ U ”,“ t ”,“ ts *”
- 什么不起作用:
“ U-”,“ u-1 ”,“ t-”,“ t-sh ”,…
看来char过滤器未在搜索字符串上执行?我该怎么做才能使这项工作?
回答:
答案很简单:
Igor Motov的话:配置标准标记器
默认情况下,simple_query_string查询不分析带有通配符的单词。结果,它搜索以i-
ma开头的所有令牌。i-mac这个词与该请求不匹配,因为在分析过程中,它被分为两个标记i和mac,并且这些标记都不以i-ma开头。为了使此查询找到i-
mac,您需要使其分析通配符:
{ "_source":true,
"query":{
"simple_query_string":{
"query":"u-1*",
"analyze_wildcard":true,
"default_operator":"AND"
}
}
}
以上是 ElasticSearch-使用连字符搜索 的全部内容, 来源链接: utcz.com/qa/416321.html