elasticsearch,nest,C#,elasticsearch,Nest" /> elasticsearch,nest,C#,elasticsearch,Nest" />

C# 如何使用ElasticSearch NEST获取列表中包含某些参数的对象?

C# 如何使用ElasticSearch NEST获取列表中包含某些参数的对象?,c#,elasticsearch,nest,C#,elasticsearch,Nest,我有一个名为Product的类,它可以在一个或多个国家(但很少在所有国家)提供 我想在我的查询中包含一些东西,使我的搜索/查询只返回在该国销售的产品 我最好的选择是在我的产品对象中有一个带有CountryID(产品销售所在国家的ID)的列表。但我无法在NEST中找到查询参数来查找其“CountryID”列表包含给定ID(我在运行时知道)的所有产品。 基本上,我想要一些关于如何通过弹性搜索编写此方法内容的帮助 Product[] GetProductsByCountryId(int country

我有一个名为Product的类,它可以在一个或多个国家(但很少在所有国家)提供

我想在我的查询中包含一些东西,使我的搜索/查询只返回在该国销售的产品

我最好的选择是在我的产品对象中有一个带有CountryID(产品销售所在国家的ID)的列表。但我无法在NEST中找到查询参数来查找其“CountryID”列表包含给定ID(我在运行时知道)的所有产品。 基本上,我想要一些关于如何通过弹性搜索编写此方法内容的帮助

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”的产品,并根据我的脚本对其进行评分。

谢谢。我发现文档很混乱,但是术语查询对我来说很有效。