如何在NEST弹性搜索中根据命中分数对结果进行排序

use*_*044 4 c# elasticsearch nest

我正在使用 NEST(c#) 与 Elasticsearch 进行通信。然而,结果不是基于命中分数,我如何根据命中分数对结果进行排序,而且我只得到 10 条记录。下面是我的代码示例

var result = client.Search(q => q
                               .Index(IndexName)
                               .From(0)
                               .Type("post")
                               .Fields("title","message")
                               .Size(10)
                               .Query(fq1 => fq1
                                  .QueryString(fqqs1 => fqqs1
                                    .OnFieldsWithBoost(d => d
                                      .Add("title", 7.0)
                                      .Add("message", 5.0))
                                      .Query(SearchQuery))));
Run Code Online (Sandbox Code Playgroud)

我的message字段将包含大文本,是否可以像谷歌搜索结果一样从消息中仅获取搜索关键字周围的几行

dan*_*oiu 5

您好,按点击分数排序只需使用

var result = client.Search(q => q
                 .Index(IndexName)
                 .From(0)
                 .Type("post")
                 .Fields("title","message")
                 .TrackScores(true)
                 .Size(10)
                 .Query(fq1 => fq1
                        .QueryString(fqqs1 => fqqs1
                            .OnFieldsWithBoost(d => d
                                .Add("title", 7.0)
                                .Add("message", 5.0)
                            )
                            .Query(SearchQuery)
                        )
                 .Sort(sort => sort.OnField("_score").Descending())
           );
Run Code Online (Sandbox Code Playgroud)

要获得更多记录,只需增加 Size() 中的数字

  • 您还可以使用“sort => sort.Descending(SortSpecialField.Score)”,以免依赖魔术字符串。 (10认同)