我有一个名为Product的课程,可以在1个或更多国家/地区使用(但很少全部都可以使用)。
我希望在我的查询中包含一些内容,使我的搜索/查询仅返回在该国家/地区销售的产品。
我最好的选择是在我的产品对象中有一个列表,其中包含CountryIds(产品销售的国家/地区)。但我在NEST中找不到查询参数来查找其所有产品" CountryIds" list包含给定的ID(我在运行时知道)。 基本上我想通过弹性搜索来解释如何编写这个方法的内容。
Product[] GetProductsByCountryId(int countryId);
Product类看起来像这样:
class Product {
string productName;
int[] countryIds;
}
答案 0 :(得分:1)
term
query将返回包含countryIDs
内国家/地区ID的文档。
如果您有多个国家/地区ID,terms
query将返回countryIDs
字段中至少包含一个国家/地区ID的文档。
答案 1 :(得分:0)
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))));
此结果还包括使用内联脚本的评分。但这里答案的重要部分是第二个查询&#34; country_ids_query&#34;。
这会过滤掉CountryIdsWhereAvailable整数数组不包含&#34; country.Id&#34;的产品,并且仍会根据我的脚本对它们进行评分。