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

时间:2016-08-16 16:55:24

标签: elasticsearch elasticsearch-2.0

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

但是,我希望查询搜索术语en-US的查询不返回任何结果,因为这实际上不是搜索的索引字段,但我可以过滤。

我可以这样做吗?

1 个答案:

答案 0 :(得分:3)

ElasticSearch使用_all字段允许对整个文档进行快速全文搜索。这就是为什么在所有文档的所有字段中搜索en-US会返回包含':' 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'在所有字段中,仅返回包含美国标题或国家/地区的文档。但您仍然可以使用语言字段过滤查询。 https://www.elastic.co/guide/en/elasticsearch/reference/current/include-in-all.html