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; }
}
我有一个用于制作冰淇淋奶昔的产品的大型数据库。该业务主要使用通用白标产品,但有时由于供应链问题,可能被迫使用品牌产品。请参考下面的示例数据
- 双巧克力
- 本和杰瑞斯双巧克力
- 仙女农场双巧克力
- 丹的双层巧克力
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、 寻找“双巧克力”的人会期待
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))));