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

如何在ElasticSearch中搜索多个条件

姬实
2023-03-14

我正在使用Nest连接到ElasticSearch并执行一些查询。到目前为止,在给定一个通配符查询的情况下,我能够得到我想要的结果,如下所示:

var searchResults = _client.Search<MyIndexable>(
            body =>
            body
                .Index("someIndex")
                .Query(
                    query =>
                    query.QueryString(
                        qs => qs.
                                  OnFields(f => f.Title, f => f.Description)
                                  .Query(searchTerm + "*"))));

但是现在我需要为某个用例的查询添加附加条件。

我需要的不仅是通过[search chTerm]*查询,还需要其他两个匹配的字段:

  • 搜索术语"*"
  • field 1="一些字符串"
  • field="一些指南"

我确信在弹性搜索中一定有办法做到这一点(使用Nest),但我还没有找到它。

我知道我可以将两个附加字段添加到索引中(如someIndex_field1_field2),这对我来说绝对是一个选择,因为field 1和field 2是不错的分区(事实上,它可能是一个更好的选择,以允许更好的分区),但我只是想看看是否有办法避免这样做,相反,是否可以向查询html" target="_blank">添加多个条件。

有人知道如何做到这一点吗?

非常感谢,

共有1个答案

佘飞鸣
2023-03-14

假设field d1field d2只是TitleDescription等另一个字段,您可以使用bool必须查询来实现您想要的。

var searchResults = _client.Search<MyIndexable>(s => s
    .Query(q => q
        .Bool(b => b
            .Must(
                subQuery => subQuery.QueryString(qs => qs.OnFields(f => f.Title, f => f.Description).Query(searchTerm + "*"")),
                subQuery => subQuery.Term(f => f.field1, "some string"),
                subQuery => subQuery.Term(f => f.field2 , "some Guid")))));
 类似资料:
  • 问题内容: 我有两个具有以下映射的索引(我将简化它们的映射): 1)AccountType映射: 2)ProductType映射: 现在,我有几件事需要弄清楚: 1)首先,有一个索引是一个好主意,在我的情况下是帐户,并且产品是嵌套对象,但是在这里每次我要更新/添加新产品时,我都必须重新索引(更新)整个帐户文件? 2)我的第二个问题是:我想具有搜索功能,因此,如果用户通过在文本框中键入内容进行搜索,

  • 问题内容: 我正在使用最新版本的elasticsearch-php以及最新版本的MongoDB和ElasticSearch。 我需要对可以包含一个或多个值的多个字段进行搜索。例: country_code应为NL,BE或DE,并且类别应包含AA01,BB01,CC02或ZZ11 我以为我会按照以下方式解决它(PHP): 但是结果甚至还不能接近我期望返回的数据。 有时 $ countries 和/或

  • 问题内容: 我正在尝试提供一种搜索功能,该功能将搜索多列以查找基于关键字的匹配项。该查询: 仅适用于搜索一列,我注意到用逗号分隔列名称会导致错误。那么可以在mysql中搜索多个列吗? 问题答案: 您可以使用AND或OR运算符,具体取决于要返回的搜索内容。 这两个子句必须匹配才能返回记录。或者: 如果任一子句匹配,则将返回记录。 有关使用MySQL SELECT查询可以执行的操作的更多信息,请尝试使

  • 问题内容: 我曾经使用过django,haystack和elasticsearch。 我的search_index.py: 搜索表格: 模板: 看 ` 我得到所有的价值,那里有“老板”和“挡泥板” 当您在搜索框中输入“ boss fender”时,我没有结果。从搜索表单中,我只能得到一个单词的结果,例如“老板”。如何使搜索多个单词的能力? 问题答案: 这个月我陷入了这个问题。 为了执行正确的查询,

  • 问题内容: 我第一次使用Postgresql,并且试图在我的网站中创建一个搜索引擎。我有这张桌子: 然后我为表的每个字段创建了一个索引(这是正确的方法吗?或者我可以为所有字段创建一个索引?): 现在,如果我想在每个索引中搜索一个单词,SQL查询是什么? 我尝试了这个,它的工作原理: 是否存在更好的方法来做到这一点?我可以搜索多个吗?我的一个朋友提出了一个解决方案,但这是针对MySQL数据库的: P

  • 问题内容: 我有一个用例,其中在同一索引中有两种不同的类型。两种类型都有不同的结构和映射。 我需要使用不同的查询DSL同时查询这两种类型。 如何构建查询DSL以同时查询多个相同索引类型。 我在https://www.elastic.co/guide/en/elasticsearch/guide/current/multi-index- multi- type.html上 查看了Elasticsea