弹性搜寻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" } } }