如何在 ElasticSearch 中搜索多个条件

How to search multiple conditions in ElasticSearch

我正在使用 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 + "*"))));

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

What I need is not only to query by [searchTerm]* but also two other fields matching:

  • searchTerm + "*"
  • field1 = "some string"
  • field2 = "some Guid"

我确定在弹性搜索中一定有一种方法可以做到这一点(使用 Nest),但我没能找到它。

我知道我可以将两个附加字段添加到索引中(如 someIndex_field1_field2),这对我来说绝对是一个选择,因为 field1 和 field2 是合适的分区(事实上,它可能是一个允许更好分区的更好选择)但我只是想看看是否有办法避免这样做,而是是否可以向查询添加多个条件。

有人知道如何实现吗?

非常感谢,

假设 field1field2 只是另一个字段,如 TitleDescription,您可以使用 bool must 查询来实现您想要的。

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")))));