在Elasticsearch 5.6中使用以下映射:
"category" => [
"type"=>"keyword",
"doc_values"=>true,
"index"=>false
"store"=>true
]
我得到的建议是,由于其doc_values设置,可以编写一个过滤此字段的查询,即使index属性设置为false,但似乎doc_values字段仅对聚合和排序有用。
是否可以创建一个过滤此字段的查询?
答案 0 :(得分:2)
未编入索引的字段为by definition,无法搜索。 Elasticsearch不会将它放在倒排索引(用于搜索)中。如果您尝试运行搜索查询,则会收到类似Cannot search on field [category] since it is not indexed.
答案 1 :(得分:-1)
Keyword数据类型默认启用doc_values。您不需要明确启用它。如果搜索到确切的文本,则可以在查询中过滤关键字字段。 例如,我有跟随索引的映射
PUT index_name
{
"mappings": {
"type_name": {
"properties": {
"id": {
"type": "long"
},
"name": {
"type": "keyword"
}
}
}
}
}
示例文件:
{
"id":1,
"name":"hatim"
}
所以,我可以通过在查询部分
中过滤它来进行搜索GET index_name/type_name/_search
{
"query": {
"term": {
"name": "hatim"
}
}
}
依此类推,您可以像这样添加聚合
GET index_name/type_name/_search
{
"query": {
"term": {
"name": "hatim"
}
},
"aggs": {
"count": {
"value_count": {
"field": "name"
}
}
}
}