rvh*_*deg 8 mapping hyphen elasticsearch
弹性搜索1.6
我想索引包含连字符的文本,例如U-12,U-17,WU-12,T恤......并且能够使用"简单查询字符串"查询来搜索它们.
数据样本(简化):
{"title":"U-12 Soccer",
"comment": "the t-shirts are dirty"}
Run Code Online (Sandbox Code Playgroud)
由于关于连字符的问题已经有很多,我已经尝试了以下解决方案:
使用Char过滤器:ElasticSearch - 在名称中使用连字符进行搜索.
所以我去了这个映射:
{
"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"
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用以下查询完成搜索:
{"_source":true,
"query":{
"simple_query_string":{
"query":"<Text>",
"default_operator":"AND"
}
}
}
Run Code Online (Sandbox Code Playgroud)
什么有效:
"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"
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11062 次 |
| 最近记录: |