排除包含elasticsearch特殊字符的结果

时间:2016-07-13 15:45:22

标签: elasticsearch

我已经看了很多寻找答案,但没有任何工作,所以这是我的问题,我有一个带字段的索引" name"对于string类型,我使用match_phrase进行简单的全文搜索,但该字段有时是由逗号,点,斜线或连字符分隔的几个单词的字符串复合,例如" engineer,operator,maintenance"。我需要排除这些结果,例如,如果我有下一个名字:

  1. "工程师,操作员,维护"
  2. "工程师"
  3. "工业工程师
  4. 如果我搜索"工程师",我想获得最后两个结果并排除第一个结果。我尝试了这样的必须条款:

    "query": {
      "bool": {
        "must": {
          "match_phrase": {
            "name": "Vendedor"
          }
        },
        "must_not":{
          "match":{
            "name": "\."
          }
        }
      }
    }
    

    我也尝试使用正则表达式,但它总是让我得到错误字符的结果:

    "must_not":{
          "regexp":{
            "name": ".*[\-\.\/\.].*"
          }
        }
    

    我做错了什么或者应该怎样做才能完成这项任务?

1 个答案:

答案 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"
                  }
               }