elasticsearch,nest,C#,elasticsearch,Nest" /> elasticsearch,nest,C#,elasticsearch,Nest" />

C# 当辅助字段为特定值时,使用嵌套增强elasticsearch结果

C# 当辅助字段为特定值时,使用嵌套增强elasticsearch结果,c#,elasticsearch,nest,C#,elasticsearch,Nest,我有一个很大的冰淇淋对象索引 public class IceCream { public string Description {get; set;} public bool IsGeneric { get; set; } public double Price { get; set; } } 我有一个用于制作冰淇淋奶昔的产品的大型数据库。该业务主要使用通用白标产品,但有时由于供应链问题,可能被迫使用品牌产品。请参考下面的示例数据 双巧克力 本和杰瑞斯双巧克力 仙女

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

public class IceCream
{
    public string Description {get; set;}
    public bool IsGeneric { get; set; }
    public double Price { get; set; }
}
我有一个用于制作冰淇淋奶昔的产品的大型数据库。该业务主要使用通用白标产品,但有时由于供应链问题,可能被迫使用品牌产品。请参考下面的示例数据

  • 双巧克力
  • 本和杰瑞斯双巧克力
  • 仙女农场双巧克力
  • 丹的双层巧克力
下面是一个基于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);
var searchInputText=“Ben&Jerries双巧克力”;
var query=new MatchQuery()
{
IsVerbatim=false,
Field=“description”,
查询=搜索输入文本
};
var search=newsearchrequest()
{
Query=Query,
From=0,
尺寸=30
};
var results=client.Search(搜索);
在搜索品牌产品时,该查询非常有效。然而,搜索“双巧克力”返回的Ben&Jerries双巧克力比一般的“双巧克力”产品具有更高的相关性

是否有办法通过Nest使用“应该”来提升IsGeneric=true字段,以确保在搜索中不包含任何品牌时,通用列表具有最高的相关性

i、 寻找“双巧克力”的人会期待

  • 双巧克力
  • 本和杰瑞斯双巧克力
  • 等等
  • 搜索“Ben&Jerries双巧克力”人们会期待

  • 本和杰瑞斯双巧克力
  • 丹的双巧克力
  • 等等
  • 注意:这是一个高度简化的示例。真实世界的应用程序包含100000个制造组件差异,因此相关性问题远比此处显示的更为严重。

    是的,您可以使用查询

    client.Search(s=>
    s、 查询(q=>
    q、 增压(b=>
    b、 否定(n=>n.Term(“isGeneric”,false))
    .Positive(p=>p.Match(m=>m.Field(“description”).Query(searchInputText)))
    。负成本(0.2%);
    

    通过以0.2的负升幅提升
    IsGeneric=false
    ,您可以将所有结果降级,而不必使用常量值
    IsGeneric=true

    我认为这是一个足够有趣的问题,足以让一篇博客文章探讨一些不同的功能:标记为接受,因为这确实有效,但最终解决方案使用了必须和应该查询。
    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))));