C# 如何使用ElasticSearch NEST获取列表中包含某些参数的对象?
我有一个名为Product的类,它可以在一个或多个国家(但很少在所有国家)提供 我想在我的查询中包含一些东西,使我的搜索/查询只返回在该国销售的产品 我最好的选择是在我的产品对象中有一个带有CountryID(产品销售所在国家的ID)的列表。但我无法在NEST中找到查询参数来查找其“CountryID”列表包含给定ID(我在运行时知道)的所有产品。 基本上,我想要一些关于如何通过弹性搜索编写此方法内容的帮助C# 如何使用ElasticSearch NEST获取列表中包含某些参数的对象?,c#,
elasticsearch,nest,C#,
elasticsearch,Nest,我有一个名为Product的类,它可以在一个或多个国家(但很少在所有国家)提供 我想在我的查询中包含一些东西,使我的搜索/查询只返回在该国销售的产品 我最好的选择是在我的产品对象中有一个带有CountryID(产品销售所在国家的ID)的列表。但我无法在NEST中找到查询参数来查找其“CountryID”列表包含给定ID(我在运行时知道)的所有产品。 基本上,我想要一些关于如何通过弹性搜索编写此方法内容的帮助 Product[] GetProductsByCountryId(int country
Product[] GetProductsByCountryId(int countryId);
产品类可以如下所示:
class Product {
string productName;
int[] countryIds;
}
将返回在countryId
中包含国家ID的文档
如果您有多个国家/地区ID,则将返回在
countryID
字段中至少包含一个国家/地区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))));
\u客户端搜索(s=>
s、 查询(q=>q.FunctionScore(fs=>fs.Functions(ff=>
ff.ScriptScore(
ss=>
Script(Script=>Script.Params(p=>PopulateParameterDictionary(p))
.Inline(GenerateSearchAlgorithm())
))))
&&+q.Terms(c=>c.Name(“国家/地区ID\U查询”)
.Field(f=>f.CountryIdsWhereAvailable)
.术语(country.Id));
该结果还包括使用内联脚本进行评分。但这里答案的重要部分是第二个查询“country\u id\u query”
这会过滤掉CountryIdsWhereAvailable integer数组不包含“country.Id”的产品,并根据我的脚本对其进行评分。谢谢。我发现文档很混乱,但是术语查询对我来说很有效。