我有以下映射:
{
"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特有的。
答案 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
}
}
}
}
}
}
}