我有一个很大的冰淇淋对象索引。
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 & Jerries Double Choc,其相关性高于一般的"Double Choc”产品。
有没有办法通过Nest使用“way”来提升IsGeneric = true字段,以确保当搜索中没有包含任何品牌时,泛型列表具有最高的相关性?
也就是寻找“双重选择”.
寻找“本和耶里斯双选择”的人会想到..。
注意:这是一个非常简化的例子。现实世界的应用程序包含100,000个制造部件差异,因此相关性问题远比这里所显示的更加引人注目。
发布于 2018-01-16 21:19:23
是的,您可以使用助推查询。
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的结果降级为一个恒定值。
https://stackoverflow.com/questions/48289142
复制相似问题