如何在ElasticSearch中搜索多个条件

时间:2015-03-09 19:41:22

标签: c# elasticsearch nest

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

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

  

我需要的不仅是[searchTerm]*,还有两个   其他字段匹配:

     
      
  • searchTerm +“*”
  •   
  • field1 =“some string”
  •   
  • field2 =“some Guid”
  •   

我确信必须有一种方法可以在弹性搜索中使用Nest),但我无法找到它。

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

有谁知道如何实现这个目标?

非常感谢,

1 个答案:

答案 0 :(得分:5)

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