我有一个很大的冰淇淋对象索引。
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);
在搜索品牌产品时,查询效果很好。但是,搜索“Double Choc”会让Ben&amp; Jerries Double Choc具有比通用“Double Choc”产品更高的相关性。
有没有办法通过Nest利用“应该”来提升IsGeneric = true字段,以确保在搜索中没有品牌时,通用列表具有最高的相关性?
即。寻找“Double Choc”的人会期待......
寻找“Ben&amp; Jerries Double Choc”,人们会期待......
注意:这是一个非常简化的示例。真实世界的应用程序包含100,000个制造组件差异,因此相关性问题远比此处显示的要大得多。
答案 0 :(得分:1)
是的,您可以使用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))));
通过提升IsGeneric = false
的负增强为0.2,您可以将IsGeneric = true
的所有结果降级为常数值。