【发布时间】:2018-10-04 01:17:04
【问题描述】:
我正在尝试构建一个基本上搜索所有全文字段的查询,提升一些,但将所有其他字段保留为默认提升 1。
当我不包含任何字段时,所有内容都会增加 1(我们使用的是支持 default when no fields are specified 的版本 6.4.2):
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)
)
)
)
)
);
我开始认为这是不可能的。对于上下文,我尝试这样做的原因是能够将其他全文字段添加到索引中,而不必在我们的查询中包含每个字段,但仍然能够提升某些字段。
【问题讨论】:
-
对于最后一个示例
bool查询,您要检查什么来断言它只匹配firstName? -
我有一个搜索,该查询返回零个结果,但返回多个结果而没有设置
.Fields()。它也可以在另一个搜索某些文档时匹配,但不如不设置.Fields()的多。
标签: c# elasticsearch nest