我正在尝试建立一个查询,该查询基本上搜索所有全文本字段,并增强了一些,但将所有其他字段保留为默认增强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)
)
)
)
)
);
我开始认为这是不可能的。对于上下文,我要这样做的原因是能够将其他全文字段添加到索引中,而不必在查询中包括每个字段,但仍然能够增强某些字段。
答案 0 :(得分:0)
弄清楚了我的问题。我将多个.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)
)
)
);