[英]How to update existing filtered elasticsearch query in .net nest
I've a json query coming from gui. 我有一个来自gui的json查询。 It has filtered query parts in it. 它已经过滤了查询部分。 I want to extend filtered query with date range filter How can I do that using nest. 我想使用日期范围过滤器扩展过滤的查询。如何使用嵌套。 I tried a method (QueryTest method) like below, but failed. 我尝试了以下方法(QueryTest方法),但失败了。
public SearchDescriptor<dynamic> GetSearchDescriptor(string queryJson = null)
{
var searchDesc = new SearchDescriptor<dynamic>();
if (string.IsNullOrEmpty(queryJson))
{
return searchDesc;
}
searchDesc = _nestClient.Serializer.Deserialize<SearchDescriptor<dynamic>>(new MemoryStream(Encoding.UTF8.GetBytes(queryJson)));
return searchDesc;
}
public string ConvertToJsonQuery(SearchDescriptor<dynamic> searchDescriptor)
{
return Encoding.UTF8.GetString(_nestClient.Serializer.Serialize(searchDescriptor, SerializationFormatting.Indented));
}
public void QueryTest()
{
var query = @"{
""query"": {
""filtered"": {
""filter"": {
""bool"": {
""must"": [
{
""term"": {
""display_name"": ""NBLEYLEK$""
}
}
]
}
}
}
}
}";
var searchDescriptor = GetSearchDescriptor(query).AllTypes();
var queryLastA = ConvertToJsonQuery(searchDescriptor);
searchDescriptor.Query(x => x.Filtered(y => y.Filter(z => z.Range(t => t.OnField("sign_time").Greater(DateTime.Now)))));
var queryLastB = ConvertToJsonQuery(searchDescriptor);
}
If I look at values of queryLastA and queryLastB, I see as: 如果查看queryLastA和queryLastB的值,我将看到:
queryLastA => queryLastA =>
{
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{
"term": {
"display_name": "NBLEYLEK$"
}
}
]
}
}
}
}
}
queryLastB => queryLastB =>
{
"query": {
"filtered": {
"filter": {
"range": {
"sign_time": {
"gt": "2015-08-25T16:13:56.694"
}
}
}
}
}
}
The desired query is : 所需的查询是:
{
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{
"term": {
"display_name": "NBLEYLEK$"
}
},
{
"range": {
"sign_time": {
"gt": "2015-08-25T16:13:56.694"
}
}
}
]
}
}
}
}
}
I expect from nest to append new filter under old one, but it ignores old filter (compare queryLastB with queryLastA). 我希望从嵌套中在旧过滤器下追加新过滤器,但它会忽略旧过滤器(将queryLastB与queryLastA比较)。 Any advice ? 有什么建议吗?
Currently in nest if we give new filter, it overrides the old filter. 当前在嵌套中,如果我们提供新的过滤器,它将覆盖旧的过滤器。 I had the same problem. 我有同样的问题。 I did string operations on query and converted it into c# class and applied filter from scratch using nest. 我对查询进行了字符串操作,并将其转换为c#类,并使用nest从头开始应用了过滤器。 This worked out for me. 这为我解决了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.