我目前使用的是 Nest elastic client,所以像这样运行基本搜索词:
.Query(q => q.QueryString(qs=>qs.Query("user search term")));
我还将这些基本搜索词与这样的方面过滤器结合起来:
.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 生成的查询吗?
最佳答案
可以使用 bool 查询
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 和 =>MinimumShouldMatch = 3
如果你想要 2 of 3 =>MinimumShouldMatch = 2
...
关于elasticsearch - 使用嵌套 Elasticsearch 客户端生成带有命名字段的 QueryString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24385755/