elasticsearch - 字段可过滤但不可搜索

elasticsearch - field filterable but not searchable

使用弹性 2.3.5。有没有办法使字段可过滤但不可搜索?例如,我有一个 language 字段,其值类似于 en-US。在 query->bool->filter->term 中设置多个过滤器,我可以在不影响分数的情况下过滤结果集,例如,仅搜索在 language 字段中具有 en-US 的文档。

但是,我想要搜索词条 en-US 到 return 的查询没有结果,因为这不是真正用于搜索的索引字段,只是为了过滤。

我可以这样做吗?

ElasticSearch 使用 _all 字段允许对整个文档进行快速 full-text 搜索。这就是为什么在所有文档 return 的所有字段中搜索 en-US 的原因是包含 'language':'en-US' 的文档。 https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-all-field.html

您可以在映射中指定 "include_in_all": false 以停用将字段包含到 _all 中。

PUT my_index
{
  "mappings": {
    "my_type": {
      "properties": {
        "title": { 
          "type": "string"
        },
        "country": {
          "type": "string"
        },
        "language": { 
          "type": "string",
          "include_in_all": false
        }
      }
    }
  }
}

在此示例中,在所有字段中搜索 'US' 将 return 仅在标题或国家/地区包含 US 的文档。但是您仍然可以使用语言字段过滤您的查询。 https://www.elastic.co/guide/en/elasticsearch/reference/current/include-in-all.html