C#弹性搜索查询,匹配多个查询

时间:2019-02-12 08:19:23

标签: c# elasticsearch nest

我有2个弹性搜索查询,每个获取的文档都需要以不同的方式进行匹配。 “池”查询是术语查询。每个文档都有一个附加的池列表,每个池都是一个字符串,并且这些池中的至少一个必须在“池”查询中提供的池列表中。

另一个查询实际上是由多个查询组成的,并且至少应有75%的匹配。

因此,要匹配文档,必须始终匹配“池”查询,而从另一个查询中至少必须匹配75%。

我这样写查询:

 var matchQuery = BuildQuery(searchCriteria);
 var poolQuery = BuildPoolsQueryField(searchCriteria);

 // prepare the data for elasticsearch
 var result = await _elasticSearchClient.SearchAsync<ElasticPersonEntity>(
          p => p.Query(q => q
                 .Bool(b => b.Must(poolQuery).Should(matchQuery.ToArray())
                 .MinimumShouldMatch(MinimumShouldMatch.Percentage(75))))).ConfigureAwait(false);

但是,如果您可以链接多个Should和Must子句,以及在这样链接它们时会发生什么,我在互联网上找不到任何地方。

1 个答案:

答案 0 :(得分:1)

根据您的描述,您的查询是错误的:您必须mustpoolQ​​uery && matchQuery(75%)这样

.MinimumShouldMatch(MinimumShouldMatch.Percentage(75)应该在您的matchQuery中:

我加入了一个示例(使用我的数据,但这应该可以解决您的问题)

.Query(q => q
                    .Bool(b => b
                        .Must(
                            mu => mu.Term(te => te.CntCd, "FR"),
                            mu => mu.Bool(bo => bo
                                .Should(your should query).MinimumShouldMatch(75)    
                            )
                       )
                    )
                )