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

时间:2014-04-10 16:59:16

标签: 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))));

我的message字段将包含大量文字,是否可能只是在搜索关键字周围搜索关键字几行,就像谷歌搜索结果一样

1 个答案:

答案 0 :(得分:3)

你好,按hitscore排序只需使用

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

要获得更多记录,只需增加Size()

中的数字即可