如何使用ElasticSearch NEST获取其列表包含一些参数的对象?

问题描述 投票:0回答:2

我有一个名为Product的类,可以在1个或更多国家/地区使用(但很少全部都可以使用)。

我想在我的查询中包含一些使我的搜索/查询仅返回在该国家/地区销售的产品的内容。

我最好的选择是在我的产品对象中有一个列表,其中包含CountryIds(产品销售的国家/地区)。但我在NEST中找不到查询参数来查找“CountryIds”列表包含给定ID(我在运行时知道)的所有产品。基本上我想通过弹性搜索来解释如何编写这个方法的内容。

Product[] GetProductsByCountryId(int countryId);

Product类看起来像这样:

class Product {
   string productName;
   int[] countryIds;
}
c# elasticsearch nest
2个回答
1
投票

term query将返回包含countryIDs内国家ID的文档。

如果您有多个国家/地区,则terms query将返回包含countryIDs字段中至少一个国家/地区ID的文档。


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))));

此结果还包括使用内联脚本的评分。但这里答案的重要部分是第二个查询“country_ids_query”。

这会筛选出CountryIdsWhereAvailable整数数组不包含“country.Id”的产品,并且仍会根据我的脚本对其进行评分。

© www.soinside.com 2019 - 2024. All rights reserved.