到目前为止,我有 json 格式的弹性查询,现在我正在尝试在 lambda 表达式中转换带有 Nest 扩展名的 Asp.Net c# 查询。面对这个问题,任何机构都可以在 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)),
) )))
只需要在 c# 或任何工具市场中的 NEST ext. 中使用 Lambda 表达式,我可以使用它来在 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"
}
}
]
}
}
]
}
}
]
}
}
}
很有趣:)你应该优化它
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"
}
}
}
]
}
}
]
}
}
]
}
}
}