【发布时间】:2015-09-01 17:51:22
【问题描述】:
我正在尝试使用 Nest 使用 ElasticSearch 构建搜索功能。我需要的是:
-
我有产品表,我索引如下:
foreach (var product in products) { Product product = new Product(product.ProductId, product.Name, product.Number, product.Description); ElasticClient.Index(productes); } -
然后我执行以下查询:
-
这很好用。我得到了结果。
var results = ElasticClient.Search<Product>(body => body.Query(query => query.QueryString(qs => qs.Query(key))).Size(20));以下查询均无效。为什么?我做错了什么?
-
-
var results = ElasticClient.Search<Product>(body => body.Filter(filter => filter.Term(x => x.Name, key)).Take(1000)); -
-
var results = ElasticClient.Search<Product>(s => s .From(0) .Size(15) .Query(q => q .Term(p => p.Name, key))); -
-
var results = ElasticClient.Search<Product>(body => body.Query(query => query.ConstantScore(csq => csq.Filter(filter => filter.Term(x => x.Name, key.ToLower())))).Take(1000));
-
我想首先了解为什么带有过滤器的查询对我不起作用。最后,我想实现一个查询,它可以搜索给定的关键字,并根据在哪个字段(列、属性)中找到结果来确定结果的优先级。
因此,如果关键字在“名称”字段中,则应在顶部返回。所以分别是“名称”、“编号”、“描述”。我怎样才能实现这样的查询?
编辑:我尝试了下面的查询,但它没有返回任何内容。
var results = ElasticClient.Search<Product>(body => body
.Query(q => q
.QueryString(qs => qs
.OnFieldsWithBoost(d => d
.Add(entry => entry.Name, 5.0)
.Add(entry => entry.Number, 3.0)
.Add(entry => entry.Description, 2.0))
.Query(key))));
下面是一些样本数据; 当我发送“2000”作为关键字时,我得到以下结果 1. 查询但其他人不会返回任何内容。
【问题讨论】:
-
您能否分享一些带有“名称”字段示例值的示例文档?
-
@bittusarkar 我添加了一些示例值,够了吗?
-
在您上面的查询中,您对
key变量使用了什么?你能分享一下你正在搜索的关键字吗? -
@Val 正如我在那里写的那样,我使用“2000”作为关键字,第一个查询返回结果,但其他查询不返回。
标签: c# elasticsearch nest