elasticsearch - Elastic Search 多个 AND + OR 查询
问题描述
我的文档架构如下。
鸣叫
Id
Title
Body
Privacy -> Values can only be ["Me", "Anyone", "Team"]
UserId
现在我只想检索标题包含“鸡肉三明治”且具有“任何人”或“团队”隐私的所有推文。但是,在同一个查询中,如果该推文的 UserId 是“1456”,我只希望返回具有“我”隐私的推文。
{
"query": {
"bool": {
"must": [
{
"bool": {
"must": [
{
"match": {
"title": {
"query": "chicken_sandwhich"
}
}
}
]
}
}
],
"should": [
{
"bool": {
"should": [
{
"term": {
"privacy": {
"value": "Anyone"
}
}
},
{
"term": {
"privacy": {
"value": "Team"
}
}
}
]
}
},
{
"bool": {
"must": [
{
"term": {
"privacy": {
"value": "Me"
}
}
},
{
"term": {
"userId.keyword": {
"value": "my_user_id"
}
}
}
]
}
}
]
}
}
}
如何构建该查询?我一直在苦苦挣扎,只需要关于我正在寻找的查询类型的帮助。
解决方案
看起来您需要在一个查询中包含两个must
s :should
{
"query": {
"bool": {
"should": [
{
"bool": {
"must": [
{
"match": {
"Title": "chicken sandwich"
}
},
{
"terms": {
"Privacy.keyword": [
"Anyone",
"Team"
]
}
}
]
}
},
{
"bool": {
"must": [
{
"term": {
"Privacy.keyword": {
"value": "Me"
}
}
},
{
"term": {
"UserId": {
"value": 1456
}
}
}
]
}
}
]
}
}
}
推荐阅读
- python - 由于 jsonschema 无法编译 python 程序
- c# - C# DataGridView 选择模式:单元格选择 - 是否可以检索该选定行的特定列值?
- android - Flutter 天气应用中的城市选择 - Flutter
- mysql - 合并两张表,使用先进先出排序
- android - 为什么 Android App Links 的自动验证失败
- java - 如何过滤 2 个巨大的列表,其中包含数百万个具有相同 ID 的项目
- image - 如何调整图像大小 woocommerce oceanwp
- python - 安装 pyinstaller 的错误
- c# - 退出时的 Visual Studio Code 会杀死附加了 C# 调试器的外部 .exe 进程
- angular - 在 karma 中测试订阅会给出错误“Observable<>”类型的参数不能分配给“订阅”类型的参数