首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当第二个字段是一个特定值时,用NEST增强弹性搜索结果

当第二个字段是一个特定值时,用NEST增强弹性搜索结果
EN

Stack Overflow用户
提问于 2018-01-16 20:17:02
回答 1查看 827关注 0票数 0

我有一个很大的冰淇淋对象索引。

代码语言:javascript
复制
public class IceCream
{
    public string Description {get; set;}
    public bool IsGeneric { get; set; }
    public double Price { get; set; }
}

我有一个用来制作冰淇淋奶昔的产品数据库。企业主要使用普通白色标签产品,但由于供应链问题,有时会被迫使用品牌产品。请参阅下面的示例数据以供参考。

  • 双乔克
  • 本与杰里斯双曲
  • 仙境农场双曲
  • 丹双巧克力

以下是基于C# Nest查询的简化示例。

代码语言:javascript
复制
        var searchInputText = "Ben & Jerries double choc";

        var query = new MatchQuery()
        {
            IsVerbatim = false,
            Field = "description",
            Query = searchInputText
        };

        var search = new SearchRequest()
        {
            Query = query,
            From = 0,
            Size = 30
        };

        var results = client.Search<IceCream>(search);

在搜索品牌产品时,查询工作非常完美。然而,搜索"Double Choc“会返回Ben & Jerries Double Choc,其相关性高于一般的"Double Choc”产品。

有没有办法通过Nest使用“way”来提升IsGeneric = true字段,以确保当搜索中没有包含任何品牌时,泛型列表具有最高的相关性?

也就是寻找“双重选择”.

  1. 双乔克
  2. 本与杰里斯双曲
  3. 等。

寻找“本和耶里斯双选择”的人会想到..。

  1. 本与杰里斯双曲
  2. 丹氏双曲
  3. 等。

注意:这是一个非常简化的例子。现实世界的应用程序包含100,000个制造部件差异,因此相关性问题远比这里所显示的更加引人注目。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-16 21:19:23

是的,您可以使用助推查询。

代码语言:javascript
复制
client.Search<IceCream>(s => 
    s.Query(q => 
        q.Boosting(b => 
            b.Negative(n => n.Term("isGeneric", false))
             .Positive(p => p.Match(m => m.Field("description").Query(searchInputText)))
             .NegativeBoost(0.2))));

通过将负Boost值为0.2的IsGeneric = false提高,您可以将所有不使用IsGeneric = true的结果降级为一个恒定值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48289142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档