c# - 当辅助字段为特定值时,使用NEST增强Elasticsearch结果

标签 c# elasticsearch nest

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

public class IceCream
{
    public string Description {get; set;}
    public bool IsGeneric { get; set; }
    public double Price { get; set; }
}

我有一个用于制作冰淇淋奶昔的大型产品数据库。该企业主要使用通用的白色标签产品,但由于供应链问题,有时可能会被迫使用品牌产品。请参阅下面的示例数据以供引用。
  • Double Choc
  • Ben和Jerries Double Choc
  • 仙女农场双巧克力
  • 丹的双重巧克力
    这是基于C#Nest的查询的简化示例。
            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”将返回与通用“Double Choc”产品相关性更高的Ben&Jerries Double Choc。

    是否可以通过Nest使用“应”来增强IsGeneric = true字段,以确保当搜索中未包含品牌时,通用列表具有最高的相关性?

    即,如果希望搜索“Double Choc”,那么...
  • Double Choc
  • Ben和Jerries Double Choc

  • 搜索“Ben&Jerries Double Choc”的人会期望...
  • Ben和Jerries Double Choc
  • 丹的双重巧克力

  • 注意:这是一个大大简化的示例。现实世界中的应用程序包含100,000个制造要素差异,因此相关性问题比这里出现的问题要严重得多。

    最佳答案

    是的,您可以使用Boosting查询。

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

    通过使用0.2的负Boost增强IsGeneric = false,您可以将不带IsGeneric = true的所有结果降为常数。

    关于c# - 当辅助字段为特定值时,使用NEST增强Elasticsearch结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48289142/

    相关文章:

    c# - 在Elasticsearch中跨多个地址字段搜索

    c# - 在 Windows 服务器中使用正确的设置和配置设置 Elasticsearch 以供生产使用

    javascript - 使用javascript下载pdf文件内容

    c# - 有没有办法将不同的 keySelector 返回给一个 OrderBy?

    c# - 使用 ffmpeg 组合来自多个源的视频和音频

    c# - 建议完成嵌套的用法

    elasticsearch - 弹性 bool 查询必须匹配不被考虑

    java - Java 代码或外部脚本中的 Elasticsearch 初始配置?

    elasticsearch - ArticleCase缺少巢式筛选器吗?

    C# 作为带有泛型但不相关 <T> 的类型的运算符