C#弹性搜索查询,匹配多个查询
C# elastic search query, match multiple queries
我有 2 个弹性搜索查询需要以不同的方式与每个获取的文档匹配。 "pools" 查询是一个术语查询。每个文档都附有一个池列表,每个池都是一个字符串,并且这些池中至少有一个必须在 "pools" 查询中提供的池列表中。
另一个查询实际上由多个查询组成,至少应匹配其中的 75%。
因此,为了匹配文档,"pools" 查询必须始终匹配,而另一个查询必须至少匹配 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 子句以及如果您这样链接它们会发生什么,我在 Internet 上找不到任何地方。
根据你的描述,你的查询是错误的:你需要mustpoolQuery && 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)
)
)
)
)
我有 2 个弹性搜索查询需要以不同的方式与每个获取的文档匹配。 "pools" 查询是一个术语查询。每个文档都附有一个池列表,每个池都是一个字符串,并且这些池中至少有一个必须在 "pools" 查询中提供的池列表中。
另一个查询实际上由多个查询组成,至少应匹配其中的 75%。
因此,为了匹配文档,"pools" 查询必须始终匹配,而另一个查询必须至少匹配 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 子句以及如果您这样链接它们会发生什么,我在 Internet 上找不到任何地方。
根据你的描述,你的查询是错误的:你需要mustpoolQuery && 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)
)
)
)
)