首页 > 解决方案 > 运算符在弹性搜索中的关键字类型字段中不起作用

问题描述

{
  "query": {
    "match": {
      "activity_type": {
        "query": "video Post",
        "operator": "OR"
      }
    }
  }
}

上面的查询不是在弹性中搜索记录我有视频和帖子的数据,上面的查询适用于文本类型的字段,但不适用于关键字类型的字段。

标签: elasticsearch

解决方案


不分析关键字字段。这意味着在每个文档上,该字段的值保持原样,而不是分解为多个术语。这实际上意味着您无法针对单个术语搜索该字段。仅搜索整个字段值。

例如,如果您有字段namekeyword的映射,以及包含以下内容的文档:

{
// rest of the document
"name": "Foo Bar Baz"
// rest of the document
}

如果您的搜索是:

{
  "query": {
    "match": {
      "name": {
        "query": "Foo Bar",
        "operator": "OR"
      }
    }
  }
}

该文件将不会被检索。您的查询需要是"query": "Foo Bar Baz".

您的问题的一个可能解决方案是将该字段作为text字段和字段进行索引keyword。你可以这样做:

{
  "mappings": {
    "properties": {
      "activity_type": {
        "type": "text",
        "fields": {
          "raw": {
            "type": "keyword"
          }
        }
      }
    }
  }
}

这样做是.raw 您的普通字段中人为地创建字段activity_type,前者具有text类型,后者具有keyword类型。

然后您的搜索将起作用,并且您仍然可以从keyword人工创建字段下的映射中受益activity_type.raw


推荐阅读