我正在尝试在C#中创建一个与对象无关的Percolator微服务。我可以使用JSON对象为映射创建和映射传递给我的方法的索引,我甚至可以使用标准的NEST查询格式为索引注册一个过滤器,例如:
var percolateResponse = client.RegisterPercolator<dynamic>(query
.Name, p=>p
.Index(index.ActualName)
.Query(q=>q
.Term(t=>t
.OnField("banana")
.Value("green"))));
问题是,我需要能够传递查询的JSON,并且我一直在尝试使用以下代码:
var percolateResponse = client.RegisterPercolator<dynamic>(query
.Name, p=>p
.Index(index.ActualName)
.Query(q=>q.Raw(query.Context)));
我传递的JSON是:
{"query":
{"term":
{"banana":
{"value": "green"}
}
}
}
虽然发生了什么,而不是将指定的查询注册为过滤器查询,它将RegisterPercolatorRequest
的查询值设置为null,并且基本上取消查询(如果存在)。
我尝试了许多不同格式的JSON,但没有找到.Query(q=>q.Raw(query.Context))
喜欢的内容。
任何人都知道如何解决这个问题吗?我已经越来越接近解决这个问题,但是从来没有完全理解这个问题。这是我创建过滤器代理类的最后一个障碍。任何帮助表示赞赏。感谢。
仅供参考,我得到的错误(在Response对象的深处)是:
[<indexName>] failed to parse query [<queryName>]];
nested: QueryParsingException[[<indexName>] [_na] query malformed,
no field after start_object
我想我已经找到了解决我想要做的事情......以上的查询并没有奏效,但通过一些反复试验,我发现了对象的工作方式 - 不可知查询并注册过滤器:
var percolateResponse = client.RegisterPercolator<dynamic>(query
.Name, p => p
.Index(index.ActualName)
.Query(q => q
.SimpleQueryString(sqs=>sqs
.Query(query.Context))));
这会将Query创建为一个简单的查询字符串,并将其存储在ElasticSearch中,当我尝试渗透与该查询匹配的文档时,它似乎可以正常工作!