在使用Nest 6.0的弹性搜索中尝试使用NEST在C#中的Lambda表达式中创建查询时遇到一些问题

时间:2019-07-25 16:08:43

标签: elasticsearch nest

截至目前,我有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"
                      }
                    }
                  ]
                }
              }
            ]
          }
        }       
      ]
    }
  }
}

1 个答案:

答案 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"
                        }
                      }
                    }
                  ]
                }
              }
            ]
          }
        }
      ]
    }
  }
}