elasticsearch,nest,C#,elasticsearch,Nest" /> elasticsearch,nest,C#,elasticsearch,Nest" />

C# 使用多重匹配的Elasticsearch/Nest搜索,并对所有其他字段进行默认增强

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 =&

我正在尝试构建一个基本上搜索所有全文字段的查询,增加一些字段,但将所有其他字段的默认值增加为1

当我不包含任何字段时,所有内容都增加了1(我们在版本6.4.2上支持):

我还尝试了将它们组合在一起,但这也只与名匹配:

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)
        )
    )
);