我使用C#与的NuGet packeges;弹性搜索5.x中嵌套多个查询C#
<package id="Elasticsearch.Net" version="5.2.0" targetFramework="net462" />
<package id="NEST" version="5.2.0" targetFramework="net462" />
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net462" />
我想在这里做什么,我想在价格区间2000“白色”项目 - 3000这是针对搜索API一个简单的请求,对吗?
所以我写了一个代码这一点。这里是;
private static void Search(IElasticContext elasticContext, string indexName)
{
IQueryContainer termQueryContainer = new QueryContainer();
termQueryContainer.Term = new TermQuery
{
Field = new Field("description"),
Value = "white"
};
IQueryContainer rangeQueryContainer = new QueryContainer();
rangeQueryContainer.Range = new NumericRangeQuery
{
Field = new Field("price"),
LessThanOrEqualTo = 3000,
GreaterThanOrEqualTo = 2000
};
//Should get 2 items.
SearchRequest<Product> searchRequest = new SearchRequest<Product>(indexName, typeof(Product))
{
Size = 10,
From = 0,
Query = (QueryContainer) rangeQueryContainer,
PostFilter = (QueryContainer) termQueryContainer
};
EsSearchResponse<Product> response = elasticContext.Search<Product>(searchRequest);
Console.WriteLine(response.StatusMessage);
if (response.IsValid)
{
foreach (Product product in response.Documents)
{
Console.WriteLine("Id: {0} | Name: {1}", product.Id, product.Name);
}
}
}
但它不工作,因为请求已经全成但在结果没有文件(S),但我有。我可以用Sense插件查看文档。
如果合并两个查询,鸟巢将扔在运行时异常(表示:“QueryContainer只能容纳一个查询中已经包含了TermQuery”)。这里是;
而且,我无法用流利的API,因为我传递参数给我的仓库般的功能;
EsSearchResponse<Product> response = elasticContext.Search<Product>(searchRequest);
我如何(在描述字段2000-3000之间&价格范围搜索)在鸟巢的dll SearchRequest结合两个简单的查询。我做错了什么?