gpt4 book ai didi

c# - 使用MultiMatch进行Elasticsearch/Nest搜索,所有其他字段均默认增强

转载 作者:行者123 更新时间:2023-12-03 01:36:00 28 4
gpt4 key购买 nike

我正在尝试建立一个查询,该查询基本上在所有全文本字段上进行搜索,增加了一些,但将所有其他字段保留为默认增加1。

当我不包含任何字段时,所有内容都会加1(我们在6.4.2版本上支持default when no fields are specified):

var results = await _ElasticClient.SearchAsync<dynamic>(s => s
.Query(q => q
.MultiMatch(m => m
.Query(request.Query)
)
)
);

但是,一旦我尝试增强单个字段,它将删除所有其他字段的默认值,仅在显式字段上搜索:
var results = await _ElasticClient.SearchAsync<dynamic>(s => s
.Query(q => q
.MultiMatch(m => m
.Fields(f => f.Field("firstName^20"))
.Query(request.Query)
)
)
);

我尝试添加通配符,但是仍然只能在 firstName上匹配(然后,通配符本身不匹配任何东西,因此假设我的语法有误):
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)
)
)
);

我也尝试 Bool将它们在一起,但这也只匹配 firstName:
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)
)
)
)
)
);

我开始认为这是不可能的。对于上下文,我尝试这样做的原因是能够向索引添加其他全文字段,而不必在我们的查询中包括每个字段,但仍然能够提升某些字段。

最佳答案

找出我的问题。我将多个.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)
)
)
);

关于c# - 使用MultiMatch进行Elasticsearch/Nest搜索,所有其他字段均默认增强,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52619540/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com