[英]Elastic search using NEST with multiple parameters
我有一个带有名称,类别,位置列的sql表。 我正在使用带有NEST的弹性搜索。 我的查询是这样的:
var result = client.Search<Models.Search.Poll>(s => s.Query(q => q.Fuzzy(f => f.OnField(p => p.Name).Value(query))))));
因此,如果有一个名称为“我们在这里”的记录,而用户搜索“是”,则返回结果。
现在,我需要向此查询添加另外两个参数类别和位置:
所以我做到了:
var result = client.Search<Models.Search.Poll>(s => s.Query(q => q.Fuzzy(f => f.OnField(p => p.Name).Value(query).OnField(r => r.Category).Value(category))));
但它现在不适用于查询字段。 但现在可以用于类别。 这是我输入名称但不选择类别时得到的结果:
StatusCode: OK,
Method: POST,
Url: http://server.abc.com:9200/pollit-dev/polls/_search,
Request: {
"query": {
"fuzzy": {
"category": {
"value": "Select a Category"
}
}
}
},
Response: {"took":2892,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":0,"max_score":null,"hits":[]}}
我很好地尝试了这一点:
var result = client.Search<Models.Search.Poll>(s => s.MatchAll().Query(q => q.Term(p => p.Name, query) || q.Term(p => p.Category,category) || q.Term(p => p.Location, Location)
但到目前为止没有运气。
问候,Asif Hameed
您有多种选择。 第一个几乎和您一样,但是您必须在其中使用Bool条件。
var result = client.Search<Models.Search.Poll>(s => s
.MatchAll()
.Query(q => q
.Bool(b => b
.Must(m => m.Term(p => p.Name, query) || m.Term(p => p.Category,category) || m.Term(p => p.Location, Location))
)
)
);
现在,另一个选择是使用queryContainers。 像这样:
var result = _Instance.Search<Models.Search.Poll>(q => q
.Query(qq =>
{
QueryContainer termQuery = null;
QueryContainer locationQuery = null;
QueryContainer categoryQuery = null;
termQuery = qq.Term(p => p.Name, query);
categoryQuery = qq.Term(p => p.Category,category);
locationQuery = qq.Term(p => p.Location, Location);
return termQuery || categoryQuery || locationQuery;
})
);
您还可以详细说明QueryContainers并在其中添加多个搜索参数。 希望这对您有所帮助。 愉快的一天!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.