截至目前,我有json格式的Elastic查询,现在我正在尝试使用Lambda表达式中带有Asp.Net c#的Nest扩展名转换此查询。面对这个问题,任何机构都可以借助json查询来帮助创建Lambda表达式。
我已经尝试过,但是它是查询中的列表类型,所以当我尝试给出错误时,可能是我的lambda表达式不正确。
我已经尝试过使用此lambda表达式,但是在调试时,查询并未像下面的json一样创建,因此需要您的帮助。
var response = _esclient.EsClient().Search<MyClassname>(a => a
.Index
.Type
.Size
.From
.Query(q => q.Bool(b => b.Must(m => m.Terms(p => p.Field(ab => ab.model).Terms(searchAjaxRequest.modeltype)),
m => m.Terms(p => p.Field(ab => ab.variant).Terms(searchAjaxRequest.varientType)),
) )))
只需要在NEST ext中使用Lambda表达式即可。在c#或我可以用来在json帮助下创建lambda表达式的任何工具市场中。在这里,布尔值和必须在其中的其他重要内容将动态地增加或减少。我不知道如何使用Nest处理这种情况。理想情况下,应在内部使用循环,但我不确定该怎么做。
{
"query": {
"bool": {
"must": [
{
"bool": {
"should": [
{
"bool": {
"must": [
{
"term": {
"variant": "lxi"
}
},
{
"term": {
"model": "ritz"
}
}
]
}
},
{
"bool": {
"must": [
{
"term": {
"variant": "lxi"
}
},
{
"term": {
"model": "alto"
}
}
]
}
},
{
"bool": {
"must": [
{
"term": {
"variant": "lxi"
}
},
{
"term": {
"model": "omni"
}
}
]
}
},
{
"bool": {
"must": [
{
"term": {
"variant": "vxi"
}
},
{
"term": {
"model": "alto 800"
}
}
]
}
}
]
}
}
]
}
}
}
答案 0 :(得分:0)
这很有趣:)您应该对其进行优化
var client = new InMemoryEsClientFactory(settings).Create();
var searchResponse = client.Search<MyClassname>(s => s.Index("index_name")
.Query(q => q.Bool(b => b.Must(m => m.Bool(b1 =>
b1.Should(
should => should.Bool(sb =>
sb.Must(m3 => m3.Terms(t => t.Field(classname => classname.Model).Terms("eeco")))),
should => should.Bool(sb =>
sb.Must(m1 => m1.Term(c => c.Field(classname => classname.Variant).Value("vxi")),
m1 => m1.Term(c => c.Field(classname => classname.Model).Value("a star"))))))))));
Request:
{
"query": {
"bool": {
"must": [
{
"bool": {
"should": [
{
"bool": {
"must": [
{
"terms": {
"model": [
"eeco"
]
}
}
]
}
},
{
"bool": {
"must": [
{
"term": {
"variant": {
"value": "vxi"
}
}
},
{
"term": {
"model": {
"value": "a star"
}
}
}
]
}
}
]
}
}
]
}
}
}