Elasticsearch NEST如何将多个查询与原始查询组合

时间:2015-12-22 16:40:38

标签: c# elasticsearch nest

我正在尝试将多个查询组合到一个布尔查询中,但生成的查询对于原始查询是空的。

这是我的方法调用

ConvertQueryToESD("{\"term\":\"fieldname\":\"value\"}"
                  ,null
                  ,a range filter)
    .From(0)
    .Take(50)
    .SortMulti(a sort)

这是方法

 internal SearchDescriptor<T> ConvertQueryToESD<T>(string queryString, string filterId, List<QueryContainer> filters) where T : class
    {
        var filterQueryString = GetFilter(filterId);
        if (!string.IsNullOrWhiteSpace(filterQueryString))
        {
            var qd = new QueryDescriptor<T>();
            filters.Add(qd.Raw(filterQueryString));
        }
        if (!string.IsNullOrWhiteSpace(queryString))
        {
            var qd = new QueryDescriptor<T>();
            filters.Add(qd.Raw(queryString));
        }
        var sd = new SearchDescriptor<T>();
        sd.Query(q => q.Bool(b => b.Must(filters.ToArray())));
        return sd;
    }

我的查询结果是

{
  "from": 0,
  "size": 50,
  "sort": [
    {
      "startTimeLocal": {
        "order": "desc"
      }
    }
  ],
  "query": {
    "bool": {
      "must": [
        {
          "range": {
            "startTimeLocal": {
              "gte": "0001-01-01T00:00:00",
              "lte": "2015-12-22T16:28:22"
            }
          }
        },
        {}
      ]
    }
  }
}

{}是我希望看到原始术语查询的地方。为什么原始查询没有被序列化到SearchDescriptor中?我检查了SearchDescriptor,并在运行搜索之前填充了该字段。我还测试过只添加原始字符串术语查询而没有范围过滤器,搜索描述符序列化正确。

附录

private string GetFilter(string filterId)
    {
        if (string.IsNullOrWhiteSpace(filterId))
        {
            return null;
        }
        var response = _elasticClient.Get<FilterMapping>(filterId);
        ThrowIfNotSuccessfull(response.ConnectionStatus);
        return response.Source?.QueryString;
    }

0 个答案:

没有答案