是否可以在 elasticsearch 中将 MultiGet 与 Bool 查询结合使用? 目标:预期结果:到目前为止的查询...:

问题描述

MultiGet api 可用于根据给定的 id 获取多个文档。 (https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-multi-get.html)

是否可以为此操作添加更多过滤器?给定一个 id 列表,我只想找到 'color' = 'green' 的文档。

示例:

假设存在以下文档:

  • 文档 1: {"id": "1","color": "green" }
  • 文档 2: {"id": "2","color": "red" }
  • 文档 3: {"id": "3","color": "green"}
  • 文档 4: {"id": "4","color": "green"}

目标:

获取 ID 为 1、2 或 4 的文档,其颜色为“绿色”。

预期结果:

[文档 1、文档 4]

到目前为止的查询...:

GET /_mget
{
  "docs": [
    {
      "_index": "my-index-000001","_id": "1"
    },{
      "_index": "my-index-000001","_id": "2"
    },"_id": "4"
    }
  ]
}

或在 C# 中使用 nesT:

var ids = new List<string> {"1","2","4"};
var result = await _elasticclient
   .MultiGetAsync(s => s
                    .Index("my-index-000001")
                    .GetMany<SomeRecordobject>(ids)
                );

所以我实际上正在寻找一种将 Bool 查询添加到 MultiGet 查询方法(我认为)。谁能指出我正确的方向?

解决方法

multi get 仅用于通过 id 获取多个文档。如果您需要执行查询或过滤,则需要搜索查询。

请注意,当涉及索引文档时,multi get 和 search 具有不同的行为。使用 multi get,可以使用其 id 立即检索刚刚索引的文档。但是,使用搜索时,只有在刷新索引(refresh interval elapses (by default,1 second)index is manually refreshed with the refresh API)后,文档才会出现在搜索结果中。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...