C# 使用多重匹配的Elasticsearch/Nest搜索,并对所有其他字段进行默认增强
我正在尝试构建一个基本上搜索所有全文字段的查询,增加一些字段,但将所有其他字段的默认值增加为1 当我不包含任何字段时,所有内容都增加了1(我们在版本6.4.2上支持): 我还尝试了将它们组合在一起,但这也只与名匹配:C# 使用多重匹配的Elasticsearch/Nest搜索,并对所有其他字段进行默认增强,c#,
elasticsearch,nest,C#,
elasticsearch,Nest,我正在尝试构建一个基本上搜索所有全文字段的查询,增加一些字段,但将所有其他字段的默认值增加为1 当我不包含任何字段时,所有内容都增加了1(我们在版本6.4.2上支持): 我还尝试了将它们组合在一起,但这也只与名匹配: var results = await _ElasticClient.SearchAsync<dynamic>(s => s .Query(q => q .Bool(b => b .Should(m =&
var results = await _ElasticClient.SearchAsync<dynamic>(s => s
.Query(q => q
.Bool(b => b
.Should(m => m
.MultiMatch(mm => mm
.Query(request.Query)
)
)
.Should(m => m
.MultiMatch(mm => mm
.Fields(f => f.Field("firstName^20"))
.Query(request.Query)
)
)
)
)
);
var results=await\u ElasticClient.SearchAsync(s=>s
.Query(q=>q
.Bool(b=>b
.Should(m=>m
.MultiMatch(mm=>mm
.Query(request.Query)
)
)
.Should(m=>m
.MultiMatch(mm=>mm
.Fields(f=>f.Field(“名字^20”))
.Query(request.Query)
)
)
)
)
);
我开始觉得这是不可能的。就上下文而言,我尝试这样做的原因是能够向索引中添加其他全文字段,而不必在查询中包含每个字段,但仍然能够增强某些字段。解决了我的问题。我将多个
.Fields()
(复数)链接在一起,其中我应该只有一个.Fields()
(复数),然后将多个.Field()
(单数)链接在一起:
var results = await _ElasticClient.SearchAsync<dynamic>(s => s
.Query(q => q
.MultiMatch(m => m
.Fields(f => f
.Field("firstName^20")
.Field("*.*^1")
)
.Query(request.Query)
)
)
);
var results=await\u ElasticClient.SearchAsync(s=>s
.Query(q=>q
.MultiMatch(m=>m
.Fields(f=>f
.Field(“名字^20”)
.字段(“*.^1”)
)
.Query(request.Query)
)
)
);
对于最后一个示例bool
query,您正在检查什么来断言它仅与firstName
匹配?我有一个搜索,该查询返回零结果,但返回多个未设置.Fields()
的结果。它还可以在另一次搜索中匹配某些文档,但数量不如未设置.Fields()。
var results = await _ElasticClient.SearchAsync<dynamic>(s => s
.Query(q => q
.MultiMatch(m => m
.Fields(f => f.Field("*.*^1"))
.Fields(f => f.Field("firstName^20"))
.Query(request.Query)
)
)
);
var results = await _ElasticClient.SearchAsync<dynamic>(s => s
.Query(q => q
.Bool(b => b
.Should(m => m
.MultiMatch(mm => mm
.Query(request.Query)
)
)
.Should(m => m
.MultiMatch(mm => mm
.Fields(f => f.Field("firstName^20"))
.Query(request.Query)
)
)
)
)
);
var results = await _ElasticClient.SearchAsync<dynamic>(s => s
.Query(q => q
.MultiMatch(m => m
.Fields(f => f
.Field("firstName^20")
.Field("*.*^1")
)
.Query(request.Query)
)
)
);