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"
},
{
"_index": "my-index-000001",
"_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,可以立即使用其 id 检索刚刚索引的文档。然而,对于搜索,只有在刷新索引(刷新间隔已过(默认为 1 秒)或使用刷新 API 手动刷新索引)后,文档才会出现在搜索结果中。
推荐阅读
- c - 如何在冒泡排序算法中交换链表的节点?
- asp.net-core - .net 标准 2.1 / Core 3.1 中的 Razor 电子邮件模板
- windows - 请求帮助编写 PS 脚本以针对我环境中的所有 Windows 服务器搜索文件列表(路径 + 文件名)
- php - 克隆 Laravel 项目后,我有 500 错误
- excel - Excel VBA 7.1 comdlg
- javascript - 无法在 canvasjs 中显示来自 JSON 的数据
- java - 我的通知未检索待处理意图中的附加内容
- angular - Angular 8 站点地图和 robots.txt
- json - 如何使用 jq 从 json 中获取一些键和值
- sql-server - 如何使用 SQL 打印出多行 XML 值