是否可以在Elasticsearch中过滤doc_值为true的非索引字段
在Elasticsearch 5.6中,使用以下映射:是否可以在Elasticsearch中过滤doc_值为true的非索引字段,
Warning: implode(): Invalid arguments passed in /data/phpspider/zhask/webroot/tpl/detail.html on line 45
,,在Elasticsearch 5.6中,使用以下映射: "category" => [ "type"=>"keyword", "doc_values"=>true, "index"=>false "store"=>true ] 我得到的建议是,尽管index属性被设置为false,但由于doc_值的设置,可以编写一个对该字段进行过滤的查询,但是doc_值字段似乎只对聚合和排序有用 是否可以创建在此字段上筛选的查询?默认情况下,数据类
"category" => [
"type"=>"keyword",
"doc_values"=>true,
"index"=>false
"store"=>true
]
我得到的建议是,尽管index属性被设置为false,但由于doc_值的设置,可以编写一个对该字段进行过滤的查询,但是doc_值字段似乎只对聚合和排序有用
是否可以创建在此字段上筛选的查询?默认情况下,数据类型已启用。您不需要显式地启用它。如果搜索到确切的文本,则可以在查询中过滤关键字字段。
例如,我有以下带有映射的索引
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"
}
}
}
}
未编制索引的字段不可搜索。Elasticsearch不会将其放入反向索引(用于搜索)。如果您尝试运行搜索查询,您将得到一个错误,如
无法搜索字段[category],因为它没有索引。
即使在映射中将“index”设置为false时,这些按关键字搜索是否有效?将字段类型定义为“keyword”时,您不需要定义任何其他选项。默认情况下,“关键字”数据类型的doc_值为true,index为true,store为false。使用索引映射查看我的更新答案。如果该字段没有索引,则无法搜索。感谢@andrestefan,如果您可以将此作为答案编写,我很乐意将其奖励给您。感谢,如果我对“category.keyword”执行术语搜索,我不会得到错误,只会得到零结果(当我与我知道存在的确切值进行匹配时)。当字段不在反向索引中时,这仍然是预期的行为吗?一位顾问留下了这个映射的文档,说可以在字段上进行筛选,我只是想弄清楚我是否遗漏了什么,因为正如你所说,根据定义,这是不可能的。类别字段的完整映射是什么?包含的子字段与问题中列出的相同,只是还有一个“copy_to”=>“TIER1”属性。TIER1有一系列的分析器等,它充当多个字段的分组,可以作为一个字段进行搜索和增强。我的理解是,这提供了对所有这些字段的自由文本搜索作为一个集合,但前提是您显式搜索第1层字段。我假设它不会显式地影响对category字段的搜索,因此不会提供对该字段进行过滤的方法。另外,如果我搜索“category”而不是“category.keyword”,我会得到您提到的错误,这就是我要求完整映射的原因。.keyword
部件应该有自己的映射。要获取索引的完整、真实的映射,请运行get/index_name/_mapping
。字段映射为:“category”:{“type”:“keyword”,“index”:false,“store”:true,“copy_To”:[“TIER1”]},关键字部分没有进一步的映射信息,只有“type”:“keyword”属性。