如何在.net nest中更新现有的过滤elasticsearch查询

本文关键字:过滤 elasticsearch 查询 更新 net nest | 更新日期: 2023-09-27 18:09:55

我有一个json查询来自gui。它过滤了其中的查询部分。我想扩展过滤查询与日期范围过滤器我怎么能做到这一点使用巢。我尝试了如下方法(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);
    }

如果我看一下queryLastA和queryLastB的值,我看到:

queryLastA =>

{      
  "query": {
    "filtered": {
      "filter": {
        "bool": {
          "must": [
            {
              "term": {
                "display_name": "NBLEYLEK$"
              }
            }
          ]
        }
      }
    }
  }
}

queryLastB =>

{
  "query": {
    "filtered": {
      "filter": {
        "range": {
          "sign_time": {
            "gt": "2015-08-25T16:13:56.694"
          }
        }
      }
    }
  }
}

所需查询的方法是:

{
  "query": {
    "filtered": {
      "filter": {
        "bool": {
          "must": [
            {
              "term": {
                "display_name": "NBLEYLEK$"
              }
            },
            {
              "range": {
                "sign_time": {
                  "gt": "2015-08-25T16:13:56.694"
                }
              }
            }
          ]
        }
      }
    }
  }
}

我希望nest在旧过滤器下附加新的过滤器,但是它忽略了旧过滤器(比较queryLastB和queryLastA)。有什么建议吗?

如何在.net nest中更新现有的过滤elasticsearch查询

当前,如果我们给出新的过滤器,它会覆盖旧的过滤器。我也有同样的问题。我对查询进行了字符串操作,并将其转换为c#类,并使用nest从头开始应用过滤器。