我有一个名为Product的类,可以在1个或更多国家/地区使用(但很少全部都可以使用)。
我想在我的查询中包含一些使我的搜索/查询仅返回在该国家/地区销售的产品的内容。
我最好的选择是在我的产品对象中有一个列表,其中包含CountryIds(产品销售的国家/地区)。但我在NEST中找不到查询参数来查找“CountryIds”列表包含给定ID(我在运行时知道)的所有产品。基本上我想通过弹性搜索来解释如何编写这个方法的内容。
Product[] GetProductsByCountryId(int countryId);
Product类看起来像这样:
class Product {
string productName;
int[] countryIds;
}
term
query将返回包含countryIDs
内国家ID的文档。
如果您有多个国家/地区,则terms
query将返回包含countryIDs
字段中至少一个国家/地区ID的文档。
Russ Cam给了我正确的想法,但我只是想发布我的完整代码结果:
_client.Search<Product>(s =>
s.Query(q => q.FunctionScore(fs => fs.Functions(ff =>
ff.ScriptScore(
ss =>
ss.Script(script => script.Params(p => PopulateParameterDictionary(p))
.Inline(GenerateSearchAlgorithm())
))))
&&+ q.Terms(c => c.Name("country_ids_query")
.Field(f => f.CountryIdsWhereAvailable)
.Terms(country.Id))));
此结果还包括使用内联脚本的评分。但这里答案的重要部分是第二个查询“country_ids_query”。
这会筛选出CountryIdsWhereAvailable整数数组不包含“country.Id”的产品,并且仍会根据我的脚本对其进行评分。