elasticsearch - 使用嵌套 Elasticsearch 客户端生成带有命名字段的 QueryString

标签 elasticsearch nest

我目前使用的是 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)
  1. 如果你想要 3 和 =>MinimumShouldMatch = 3
  2. 如果你想要 2 of 3 =>MinimumShouldMatch = 2

    ...

关于elasticsearch - 使用嵌套 Elasticsearch 客户端生成带有命名字段的 QueryString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24385755/

相关文章:

amazon-web-services - 尝试查询 AWS ElasticSearch 集群时出现 403 Forbidden

java - 搜索请求生成器 : is there a way to ask to return all fields?

elasticsearch - 无法启动auditbeat

c# - 将您的请求存储在带有Nest的Elasticsearch缓存中?

elasticsearch - 在不同字段之间按空格分隔的查询字符串进行搜索

elasticsearch 嵌套支持 functionscore 函数中的过滤器

elasticsearch - 在Elasticsearch扫描和滚动中,是否可以控制批量大小和限制搜索中的文档数量?

regex - 模式不匹配流利 Elasticsearch

c# - 使用NEST显示 Elasticsearch 命中值

ElasticSearch/NEST/No results with "Term"但 "Match"