我正在使用NEST客户端查询ES,但是现在我遇到了一种特殊情况-我正在尝试将查询代理到ES,但是默认情况下应用了特定查询:
public IEnumerable<TDocument> Search<TDocument>(string indexName, string query, string sort, int page, int pageSize) where TDocument : class
{
var search = new SearchRequest(indexName)
{
From = page,
Size = pageSize,
Query = new RawQuery(query),
};
var response = this.client.Search<TDocument>(search);
return response.Documents;
}
上面的代码只是将查询代理到ES,但是如果我需要应用应始终与传递的查询一起应用的特定过滤器,该怎么办?
例如,我希望Active
字段默认为true
。如何将这个原始查询与某些特定且始终应用的过滤器合并(如果可能,不合并字符串以制定合并的ES API调用)。
假设query
是与查询DSL相对应的格式正确的JSON,则可以将其反序列化为QueryContainer
的实例,并将其与其他查询组合。例如