我已经看了很多寻找答案,但没有任何工作,所以这是我的问题,我有一个带字段的索引" name"对于string类型,我使用match_phrase进行简单的全文搜索,但该字段有时是由逗号,点,斜线或连字符分隔的几个单词的字符串复合,例如" engineer,operator,maintenance"。我需要排除这些结果,例如,如果我有下一个名字:
如果我搜索"工程师",我想获得最后两个结果并排除第一个结果。我尝试了这样的必须条款:
"query": {
"bool": {
"must": {
"match_phrase": {
"name": "Vendedor"
}
},
"must_not":{
"match":{
"name": "\."
}
}
}
}
我也尝试使用正则表达式,但它总是让我得到错误字符的结果:
"must_not":{
"regexp":{
"name": ".*[\-\.\/\.].*"
}
}
我做错了什么或者应该怎样做才能完成这项任务?
答案 0 :(得分:1)
在索引设置中,你可以添加一个char过滤器和这样的模式,但是你需要重新索引,请在这里查看更多详细信息https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-pattern-analyzer.html
"char_filter": {
"pattern": {
"pattern": "\\W+",
"type": "pattern_replace",
"replacement": " "
},
"html": {
"type": "html_strip"
}
}