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"

}

}

}

  1. 什么有效:

“ U-12”,“ U ”,“ t ”,“ ts *”

  1. 什么不起作用:

“ 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

回到顶部