我正在按以下方式进行通配符搜索,并且我希望以(*)开始的结果比包含(her)搜索结果的排名更高。有没有办法做到这一点?

elasticClient.Search<ClientSearchContract>(p =>
                p.Query(q => q
                    .Bool(bq => bq
                        .Should(mq => mq.QueryString(qs =>
                    qs.Query(her* *her*))
                        )
                    )
                )
                .Sort(x => x.OnField("_score").Descending())
            );

最佳答案

这可以为您提供帮助:

            var result = elasticClient.Search<ClientSearchContract>(q => q
            .Index("index")
            .Type("type")
            .Query(qq =>
            {
                QueryContainer startsQuery = null;
                QueryContainer containQuery = null;
                {
                    startsQuery |= qq.QueryString(qs => qs.OnFields(f => f.Field).Query("her*").Boost(2));
                    containQuery |= qq.QueryString(qs => qs.OnFields(f => f.Field).Query("*her*").Boost(1.2));
                }

                return startsQuery || containQuery;
            })
            .Take(10)
            .Sort(x => x.OnField("_score").Descending())
            );

关于c# - Boosting使用Elastic/NEST开始并包含搜索,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32085165/

10-09 06:16