elasticsearch - Elasticsearch 查询具有多个值的字段
问题描述
是否可以编写一个 Elasticsearch 查询,只返回在给定字段中具有多个值的文档?我不在乎这些值是什么,只是一个字段有多个,而不是 1。
我希望查询匹配:
{
"color": ["red", "blue"]
},
{
"color": ["green", "yellow", "orange"]
}
但不是
{
"color": "red"
}
理想情况下,我宁愿避免在查询中使用脚本;它们在我的集群上被禁用。
解决方案
我不知道不使用脚本就可以工作的解决方案。但你有选择:
准备工作:索引一些示例文档
POST my_index/_bulk
{"index": {"_id": 1}}
{"color": ["red", "blue"]}
{"index": {"_id": 2}}
{"color": ["green", "yellow", "orange"]}
{"index": {"_id": 3}}
{"color": ["grey"]}
选项 1:在查询时使用脚本(“昂贵”)
GET my_index/_search
{
"query": {
"script": {
"script": "doc.color.size() > 1"
}
}
}
选项 2:在索引时使用脚本(“便宜”)
(首选方法,因为脚本在每次文档写入时只执行一次)
PUT _ingest/pipeline/set_number_of_colors
{
"processors": [
{
"script": {
"lang": "painless",
"source": "ctx.number_of_colors = ctx.color.size()"
}
}
]
}
POST my_index/_update_by_query?pipeline=set_number_of_colors
GET my_index/_search
{
"query": {
"range": {
"number_of_colors": {"gt": 1}
}
}
}
您还可以将管道配置为索引的默认管道,因此您无需更改索引应用程序逻辑中的任何内容。
推荐阅读
- swift - 如何阻止为 iOS 12 目标自动生成 Reality Composer Swift 文件?
- altair - 轴域并未准确定义图表的呈现方式
- powerbi - 将 tableau 报表复制到 Power BI
- python - 无法手动加载 kears imbd 数据集
- python - 为什么我会收到有关“NoneType”的错误消息?
- php - 如何修复 Symfony 中的“已有数据”错误
- css - 页面中的 Ionic 4 SCSS 被忽略
- flutter - 自定义按钮在子小部件上具有默认大写文本
- android - 尝试使用 Firebase 进行电话身份验证时出现 FirebaseAuthInvalidUserException。(ERROR_INVALID_USER_TOKEN)
- hyperledger-fabric - 未能订购交易。错误代码:SERVICE_UNAVAILABLE 使用 raft 共识协议