更改在elasticsearch中解释连字符的方式

时间:2014-09-19 09:23:51

标签: elasticsearch

我的字段包含具有以下结构<name>-<version>的名称(例如foo-1.0)。

我有以下分析器配置:

"settings": {
  "index": {
    "analysis": {
      "analyzer": {
        "default": {
          "type": "snowball",
          "language": "English"
        }
      }
    }
  }

以下映射:

"itemName": {
  "type": "multi_field",
    "fields": {
      "itemName": {
        "type": "string",
        "index": "analyzed"
      },
      "untouched": {
        "type": "string",
        "index": "not_analyzed"
      }
    }
  },

我希望能够搜索foo-1.0而无需引用它。根据用户反馈,这是他们期望能够做到的,但不幸的是,foo-1.0被解释为foo NOT 1.0。我知道连字符等同于NOT,但我天真地认为只有前面有空格(例如foo -1.0)才会这样做。是否有一种方法可以将弹性搜索配置为停止将连字符解释为NOT,或者在没有前缀空格时停止在连字符上拆分?或者是我可以通过分析仪影响的东西?

我不知道这是否会影响答案,但我也希望能够搜索同一查询中的其他字段。例如。类似于foo-1.0 OR bar

非常感谢您的帮助。

格雷厄姆。

2 个答案:

答案 0 :(得分:1)

您可以使用反斜杠-(或使用JSON双反斜杠\

时转义\\

搜索

"foo\\-1.0"

答案 1 :(得分:0)

curl -XPUT http://localhost:9200/index_name -d '{
    "mappings" : {
        "type_name" : {
            "properties" : {
                "field_name" : { "type": "string", "index" : "not_analyzed" }
            }
        }
    }
}'

之后您可以使用术语查询或查询字符串。