由于Elasticsearch的最新版本已弃用单个索引中的多个类型,因此我已经通过类型为“关键字”的“ doc_type”字段组织了数据,这使我可以运行以下查询:
curl 'localhost:9200/my_index/_search?pretty&q=doc_type:my_doc_type'
此查询将返回其doc_type字段确切为“ my_doc_type”的所有文档。 现在,我只想从这种请求中检索字段的映射。
为重现这种情况,假设我们按如下方式定义索引映射:
curl -XPUT 'localhost:9200/my_index/my_type/_mapping?pretty' -H 'Content-Type: application/json' -d '{
"my_type" : {
"properties" : {
"first_name" : {"type" : "text" },
"last_name": {"type": "text"},
"doc_type": {"type": "keyword"}
}
}
}'
现在,让我们注入以下两个文档:
curl -XPUT 'localhost:9200/my_index/my_type/1' -H 'Content-Type: application/json' -d '{ "last_name": "Doe", "first_name": "John", "doc_type": "type_a"}'
curl -XPUT 'localhost:9200/my_index/my_type/1' -H 'Content-Type: application/json' -d '{ "first_name": "Jane", "doc_type": "type_b"}'
我将只能检索与查询q=doc_type:type_b
匹配的文档的映射。在那种情况下,我应该只检索字段“关键字”和“ first_name”的映射。
如果用单个查询无法做到这一点,我知道Elasticsearch提供了一个特定的字段映射查询,但是要使用它,我首先需要检索与q=doc_type:type_b
查询匹配的所有文档的ALL字段并集。还有办法吗?
答案 0 :(得分:1)
我不是专家,但是我相信不可能对特定的ElasticSearch查询结果进行“映射”。 ES文档中的definition of the mapping说:
映射是定义文档的方式及其字段的过程 包含,存储并建立索引。例如,使用映射到 定义:[...]
此概念对于查询结果没有意义。
似乎必须检索所有结果并计算并集。或者,您可以尝试对计数非null值的映射中的 all 字段进行汇总。不确定效率如何。
在任何情况下,接收完整的映射并过滤相关的字段可能比分别为每个字段检索每个字段要好。