当前位置: 首页 > 知识库问答 >
问题:

带有嵌套和/或查询的Elasticsearch

邢同
2023-03-14

我正在努力编写一个具有多个和/或条件的弹性搜索查询。

它的基本逻辑如下:cond1&(cond2cond3cond4)

正如docs中提到的,如果一个文档只满足must子句,那么它就被认为是匹配的。在这种情况下,should子句起到增强作用,即如果文档除了mouth子句之外还匹配一个或多个should子句,那么它将具有更高的相关性得分,假设cond2、cond3和cond4是计算相关性得分的查询。

问题是我只想要至少匹配OR条件之一的文档。

请注意,我运行的是ES6.3。我也尝试过多字查询,但这些结果也是错误的。

添加boost似乎不会影响结果,我有只匹配第一个条件的结果。

{
    "query": {
        "bool": {
            "must": [
              {
                    "term": {
                        "event.keyword": {
                            "value": "webhook.trigger"
                        }
                    }
                }
            ],
            "should": [
                {
                    "match": {
                        "metaData.webhook.title": "My Example Title 1"
                    }
                },
                {
                    "match": {
                        "metaData.webhook.title": "Testing"
                    }
                },
{
                    "match": {
                        "metaData.webhook.url": "myurl.com"
                    }
                }
            ]
        }
    }
}

共有1个答案

鲜于凯康
2023-03-14

Wash查询的工作方式类似于OR,只有在没有MUST查询的情况下。在您的示例中,应该将Wash查询包装到另一个bool查询中。

{
    "query": {
        "bool": {
            "must": [
                {
                    "term": {
                        "event.keyword": {
                            "value": "webhook.trigger"
                        }
                    }
                },
                {
                    "bool": {
                        "should": [
                            {
                                "match": {
                                    "metaData.webhook.title": "My Example Title 1"
                                }
                            },
                            {
                                "match": {
                                    "metaData.webhook.title": "Testing"
                                }
                            },
                            {
                                "match": {
                                    "metaData.webhook.url": "myurl.com"
                                }
                            }
                        ]
                    }
                }
            ]
        }
    }
}```
 类似资料:
  • 问题内容: 这是我在elasticsearch中存储在索引上的数据类型。我必须找到包含主要成分牛肉(且重量小于1000)和成分-(辣椒粉且重量小于250),(橄榄油和重量小于300)以及所有其他成分类似的食谱。 索引的映射是 我的查询是 但这给了Null。有人可以帮我吗?我认为我没有正确使用嵌套查询 问题答案: 试试这个:

  • 我有一个带有嵌套映射的索引。我想预先形成一个查询,该查询将返回以下内容:给我搜索词中每个单词出现在一个或多个嵌套文档中的所有文档。 以下是索引: 以下是我尝试的最新查询: 例如,如果我搜索单词“食物和水”,我希望每个单词至少出现在嵌套文档中。即使只有一个单词存在,当前搜索也会返回文档 谢谢你的帮助! 更新:正如克里斯托所建议的,解决方案有效。现在我有以下问题。 这是我的索引: 我要执行的查询是,如

  • jOOQ可以将查询结果映射到POJO中的多个嵌套列表吗?例如,我有一个POJO VM,它代表一个虚拟机。它具有'networks'属性,这是一个类型为network的列表。它还有一个'hdds'属性,这是一个类型为'hdd'的列表。该查询连接VM、HDD和Networks表。我是否可以“获取”到vm.class并期望jOOQ“做正确的事情”?

  • 问题内容: 我想使用ES进行图书搜索。因此,我决定将作者姓名和标题(作为嵌套文档)放入索引,如下所示: 我不明白的是:如何构造搜索查询,以便在搜索“一二”时仅找到第二本书,而在搜索“二三”时什么也找不到,而在搜索“一”时所有图书呢? 问题答案: 也许是这样的? 该查询基本上说一个文件必须有and 。您可以轻松地重新配置该查询。例如,如果您只想搜索作者,请删除嵌套部分。如果您想要另一本书,请更改嵌套

  • 我需要帮助与HQL/JPQL查询JavaSpring Boot项目与Hibernate和Postgresql数据库。 主要实体是学生和课程(为简洁起见,省略了额外的字段和注释)。 学生 持久实体: 数据库表: 课程可以是存储在数据库中uuid[]字段中的不同课程周期的一部分。 持久实体: 数据库表: 我需要一个方法

  • 好吧,这一个对你们中的一个超级棒的弹性搜索专家来说可能不会太难。我得到了这个嵌套查询,我希望嵌套查询在一个非嵌套字段(状态)上进行过滤。我不知道把过滤器放在哪里。我试着把它放在一个查询中(如下),但没有给出正确的结果。你能帮我吗?