使用弹性2.3.5。有没有办法让一个字段可过滤但不可搜索?例如,我有一个language
字段,其值为en-US
。在query->bool->filter->term
中设置多个过滤器,我可以在不影响分数的情况下过滤结果集,例如,仅搜索en-US
字段中language
的文档。
但是,我希望查询搜索术语en-US
的查询不返回任何结果,因为这实际上不是搜索的索引字段,但我可以过滤。
我可以这样做吗?
答案 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