elasticsearch,nest,C#,elasticsearch,Nest" /> elasticsearch,nest,C#,elasticsearch,Nest" />

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

C#弹性搜索查询,匹配多个查询,c#,elasticsearch,nest,C#,elasticsearch,Nest,我有两个弹性搜索查询,每个获取的文档需要以不同的方式进行匹配。“pools”查询是一个术语查询。每个文档都附带一个池列表,每个池都是一个字符串,其中至少有一个池必须位于“池”查询中提供的池列表中 另一个查询实际上由多个查询组成,其中至少有75%应该匹配 因此,为了匹配文档,必须始终匹配“池”查询,并且从另一个查询中,必须至少匹配75% 我这样写我的查询: var matchQuery = BuildQuery(searchCriteria); var poolQuery = BuildPoo

我有两个弹性搜索查询,每个获取的文档需要以不同的方式进行匹配。“pools”查询是一个术语查询。每个文档都附带一个池列表,每个池都是一个字符串,其中至少有一个池必须位于“池”查询中提供的池列表中

另一个查询实际上由多个查询组成,其中至少有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);
var matchQuery=BuildQuery(searchCriteria);
var poolQuery=BuildPoolsQueryField(searchCriteria);
//为elasticsearch准备数据
var result=await\u elasticSearchClient.SearchAsync(
p=>p.Query(q=>q
.Bool(b=>b.Must(poolQuery).Should(matchQuery.ToArray())
.MinimumShouldMatch(MinimumShouldMatch.Percentage(75щщ)).ConfigureAwait(false);

但是如果你可以链接多个应该和必须子句,我在互联网上找不到任何地方,如果你这样链接它们会发生什么。

根据你的描述,你的查询是错误的:你需要使用poolquery和matchQuery(75%)这样做

.MinimumShouldMatch(MinimumShouldMatch.Percentage(75))应在匹配查询中:

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

.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)    
                            )
                       )
                    )
                )