我的冰淇淋对象索引很大。
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”将返回与通用“Double Choc”产品相关性更高的Ben&Jerries Double Choc。
是否可以通过Nest使用“应”来增强IsGeneric = true字段,以确保当搜索中未包含品牌时,通用列表具有最高的相关性?
即,如果希望搜索“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/