我目前正在运行一个Elasticsearch实例,它正在通过河流从MongoDB同步。 MongoDB包含如下条目:
{field1: "value1", field2: "value2", cars: ["BMW", "Ford", "Porsche"]}
并非Mongo中的每个条目都有 cars 字段。
现在我想创建一个ElasticSearch查询,该查询搜索每个文档,并返回Elasticsearch中索引的每个文档中的cars字段。
甚至可能吗? Elasticsearch必须触摸每个文档才能返回 cars 字段。也许查询Mongo比Elasticsearch更容易和更快。你觉得怎么样?
答案 0 :(得分:0)
Elasticsearch(根据我的理解)并非旨在成为SSoT数据库。它非常擅长文本搜索和分析聚合,但它并不一定是您的主数据库。
但是,您的用例在弹性搜索中并不一定具有高性能,听起来您只想过滤汽车领域,您可以按照此处的说明进行操作:
https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-fields.html
最后,我真的冒昧说弹性搜索在这种情况下比mongo更快(假设cars字段没有索引,而弹性搜索是,它们各自的默认值),因为你可能想要过滤掉没有设置汽车领域。
tl; dr elasticsearch并不适用于您的特殊情况,但它可能比mongo更快,假设您过滤掉了缺少的汽车领域'
答案 1 :(得分:0)
以下发布到hostname:9200/_search
的查询应该可以帮助您入门:
{
"filter": {
"exists": {
"field": "cars"
}
},
"fields": ["cars"]
}
filter
子句将结果限制为具有cars
字段的文档。
fields
子句仅表示返回cars
字段。如果您想要返回整个文档,则可以将此部分保留。
参考文献: