elasticsearch ElasticSearch使用空格搜索连字符文本,而不是在查询上破折号
我已经用firstName=Jean-Marc索引了data person,我希望能够使用不同查询组合找到此人,例如,对于firstName Jean-Marc,应该可以使用以下搜索: Jean-Marc和带空格或破折号的Jean-Marc 以下是映射:elasticsearch ElasticSearch使用空格搜索连字符文本,而不是在查询上破折号,elasticsearch,search,whitespace,hyphen,elasticsearch,Search,Whitespace,Hyphen,我已经用firstName=Jean-Marc索引了data person,我希望能够使用不同查询组合找到此人,例如,对于firstName Jean-Marc,应该可以使用以下搜索: Jean-Marc和带空格或破折号的Jean-Marc 以下是映射: "firstName": { "type": "keyword", "normalizer": "keyword_normalizer", "fields": { "analysed": {
"firstName": {
"type": "keyword",
"normalizer": "keyword_normalizer",
"fields": {
"analysed": {
"type": "text",
"analyzer": "hyphen_analyzer",
"search_analyzer": "standard",
"fielddata": true
}
}
}
以及设置:
"char_filter": {
"allowOnlyChar": {
"pattern": "[^A-Za-z]",
"type": "pattern_replace",
"replacement": " "
}
}
"analyzer": {
"hyphen_analyzers": {
"filter": "lowercase",
"char_filter": [
"allowOnlyChar"
],
"type": "custom",
"tokenizer": "standard"
}
}
当我保持破折号时,我得到了那个人,但没有空格查询的结果
我使用弹性6.2.4定义分析仪:
"char_filter": {
"allowOnlyChar": {
"pattern": "[^A-Za-z]",
"type": "pattern_replace",
"replacement": " "
}
}
"analyzer": {
"yourAnalyzer": {
"filter": "lowercase",
"char_filter": [
"allowOnlyChar"
],
"type": "custom",
"tokenizer": "standard"
}
}
当然,用这个分析器为你的文档编制索引。
分析器:你的分析器
链接到文档:感谢您的帮助,当我使用关键字类型时,您的建议似乎不起作用,我用全局配置更新了问题。哦,我的错,在映射中没有看到关键字。不管你是否也可以将分析器设置为关键字,非常简单:谢谢你的回答。将我的标记器更改为关键字效果很好