Elasticsearch NEST嵌套查询不起作用c#

分享于2022年07月17日 elasticsearch nest 问答
【问题标题】:Elasticsearch NEST嵌套查询不起作用c#(Elasticsearch NEST nested query not working c#)
【发布时间】:2022-01-22 11:28:51
【问题描述】:

我遇到了从 6.4 升级到 6.8 时无法解决的 ElasticSearch 查询问题:

我的架构有这个

...
              "levels" : {
                "type" : "nested",
                "dynamic" : "false",
                "properties" : {
                  "curriculaCount" : {
                    "type" : "integer"
                  },
                  "hoursEarned" : {
                    "type" : "half_float"
                  },
                  "levelCode" : {
                    "type" : "keyword"
                  }
                }
              },
...

我有一个在 Kibana 开发工具中运行良好的查询:

{
  "query": {
    "nested": {
      "path": "banner.levels",
      "query": {
        "bool": {
          "filter": [
            {
              "match": {
                "banner.levels.levelCode": "UG"
              }
            },
            {
              "range": {
                "banner.levels.curriculaCount": {
                  "gt": 0
                }
              }
            },
            {
              "range": {
                "banner.levels.hoursEarned": {
                  "lte": 29
                }
              }
            }
          ]
        }
      }
    }
  }
}

我对应的 c# 代码曾经在 6.4 中工作,但在 6.8 中失败了,并且没有多少尝试可以让我成功查询:

       queries.Add(new NestedQuery()
                {
                    Path = Infer.Field(x => x.banner.levels),
                    
                    Query = new BoolQuery()
                    {
                        Must = new List()
                        {
                            new NumericRangeQuery()
                            {
                                Field = Infer.Field(x => x.banner.levels.First().hoursEarned),
                                LessThan = 30
                            },
                            new NumericRangeQuery()
                            {
                                Field = Infer.Field(x => x.banner.levels.First().curriculaCount),
                                GreaterThan = 0
                            },
                            new TermQuery()
                            {
                                Field = Infer.Field(x => x.banner.levels.First().levelCode.Suffix("keyword")),
                                Value = "UG"
                            }
                        }
                    }
                });

我所做的任何事情都会给我带来可怕的“无效的 NEST 响应,该响应是由对 POST 的不成功的低级调用构建的......”

我希望有办法获得更详细的错误消息...

非常感谢任何帮助!

更新

我终于解决了这个问题,它与上面的代码无关。清除所有索引,重新加载架构,然后用新数据修复所有不稳定的行为


【解决方案1】:

如果将 elasticsearch 更新到新版本,我建议清除旧索引,重新加载架构并重新加载新数据。这解决了问题。

  • 正如目前所写,您的答案尚不清楚。请 edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息 in the help center