我目前正在使用Nest弹性clien,因此请运行如下基本搜索词:
.Query(q => q.QueryString(qs=>qs.Query("user search term")));
我还将这些基本搜索字词与facet过滤器结合使用,如下所示:
.Query(
q => q.QueryString(qs => qs.Query("user search term"))
&& q.Terms(t => t.Brand, new string[] {"brand1", "brand2"})
&& q.Terms(t => t.Colour, new string[] {"blue", "black"})
&& q.Range(r => r.From(50).To(100).OnField(f => f.Price))
);
但是我努力运行适用于特定字段的自定义查询字符串搜索。 搜索查询字符串将被传递到我的应用程序,因此我不知道我搜索的特定字段,所以我不能在客户端上使用.OnField()方法
例如,希望能够传递一个同时按品牌,性别和颜色搜索的查询字符串。从查看Elastic搜索查询DSL我想我应该能够传入一个查询字符串来命名字段,如下所示:
.Query(q => q.QueryString(qs => qs.Query("brand:brand1 AND gender:male AND colour(blue)")));
但这不起作用并且不会返回任何结果。如何生成查询字符串以在Nest客户端的特定字段上搜索?
还有什么方法可以从嵌套SearchDescriptor查看生成的查询?
答案 0 :(得分:0)
您可以使用布尔查询
List<QueryContainer> shoudQuery = new List<QueryContainer>();
shoudQuery.Add(new MatchQuery()
{
Field = "brand",
Query = "brand1",
});
shoudQuery.Add(new MatchQuery()
{
Field = "gender",
Query = "male",
});
shoudQuery.Add(new MatchQuery()
{
Field = "colour",
Query = "blue",
});
QueryContainer queryContainer = new BoolQuery
{
Should = shoudQuery.ToArray(),
Must = new QueryContainer[] { new MatchAllQuery() },
MinimumShouldMatch = 3,
};
var result = Client.Search(s => s.Size(resultSize).Query(q => queryContainer)
如果要3之2 => MinimumShouldMatch = 2
...