如何在.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)。有什么建议吗?
当前,如果我们给出新的过滤器,它会覆盖旧的过滤器。我也有同样的问题。我对查询进行了字符串操作,并将其转换为c#类,并使用nest从头开始应用过滤器。