关键字

时间:2017-07-10 06:05:08

标签: elasticsearch

我有以下映射:

{
  "events": {
    "mappings": {
      "event": {
        "Type of Event": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        }
      }
    }
  }
}

索引中的以下数据

{
  "Type of Event": "Orientation Session"
},
{
  "Type of Event": "Orientation Tutorial"
}

我尝试仅匹配Type of Event == "Orientation Session"

我正在尝试以下查询:

{
  "query": {
    "term": {
      "Type of Event.keyword": "Orientation Session"
    }
  }
}

但它与任何东西都不匹配。但是,如果字符串中没有空格,它确实有效。我不能在这里使用match查询,因为它会匹配这两个事件。

我做错了什么?我在术语查询中看到了很多关于空格的讨论,但没有关于使用keyword的讨论。它们都是elasticsearch 2.0特有的。

1 个答案:

答案 0 :(得分:1)

问题在于您的地图错误,您错过了properties关键字。

如果您尝试使用您提供的映射创建索引,则应该收到以下错误:

unknown setting [index.events.mappings.event.Type of Event.fields.keyword.ignore_above] please check that any required plugins are installed, or check the breaking changes documentation for removed settings

所以你需要使用以下映射,它将起作用:

{
  "mappings": {
    "event": {
      "properties": {             <--- this was missing
        "Type of Event": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        }
      }
    }
  }
}