json - 如何在 Elasticsearch 中按两个子句过滤数据?
问题描述
我正在尝试根据两个条件过滤数据集。如果满足条件 1(其中记录包含 A 和 B)或条件 2(其中记录包含 A 和 C),我希望我的结果返回包含通配符的记录。
例如,如果我在这里有这个表(并且 Z 只是一个随机填充字符):
TABLE 1
AZZZ ZBZ
ZZZZ ZAZ
ZZAZ ZZB
CZZZ ZZA
AZZZ ZCZ
ZZZZ ZZZ
ZZCZ ZZZ
我希望我的返回结果是这样的:
TABLE 1 (Returned)
AZZZ ZBZ
ZZAZ ZZB
CZZZ ZZA
AZZZ ZCZ
我一直在尝试这些代码,但似乎无法获得预期的结果:
{
"query":{
"query_string":{
"analyze_wildcard":true,
"default filter":"*",
"query":"A B"
}
}
}
有什么想法吗?
解决方案
通配符查询允许您匹配未分析 (
keyword
) 字段上的部分字符串,例如:POST my_index/_search { "query": { "wildcard" : { "my_field" : "*A*" } } }
布尔查询是您组合事物的朋友。我认为将其重组为以下应该等效的内容会更容易:
POST my_index/_search { "query": { "bool" : { "must" : { "wildcard" : { "my_field" : "*A*" } }, "should" : [ { "wildcard" : { "my_field" : "*B*" } }, { "wildcard" : { "my_field" : "*C*" } } ], "minimum_should_match" : 1 } } }
但这不会非常高效。抽象出你在那里拥有什么样的数据以及你想要实现什么有点困难,但也许有更好的方法来实现这一目标?这个问题在很大程度上是围绕关系数据库的特性建模的,而搜索引擎有更多的选择。
推荐阅读
- python - vscode anacondapython中未定义的变量url
- mysql - 从具有时间戳和访问者 ID 的 sql 表中为访问者 InTime 访问者 OutTime 和访问持续时间(时间差)生成 SQL 查询
- arrays - 在给定成本下最大化数组子集的总和
- python - 尝试在 Python 中使用 Selenium 为用户名和密码选择一个字段
- java - 我如何在没有任何 gui 的 Linux 服务器上使用 java Save All Resources in chrome headless?
- c - 这个 GCC 警告是什么意思?
- here-api - 这里 Maps Routing Api 返回 404 5 次中有 1 次
- php - 重定向页面时如何将数据发布到控制器
- python - 如何在电子游戏中赋予 AI 控制权?
- javascript - 从 Firebase 更新数据时出现“坐标”错误