脚本不支持内联

时间:2016-04-07 11:14:58

标签: elasticsearch nest

我正在使用nest进行弹性搜索查询。这是我的询问。

 Client.Search<Model>(
                   a =>
                       a.Query(
                           b => b.Bool(c => c.Must(d => d.Script(e => e.Inline("doc['firstname'].value == doc['lastname'].value"))))));

我的目的是获取名字和姓氏相同的记录。但是elasticsearch查询在某种意义上是有效的。这是查询

"query": {
    "filtered": {
       "filter": {
           "script": {
              "script": "doc['firstname'].value == doc['lastname'].value"
           }
       }
    }
    }

但我得到的脚本并不支持使用嵌套

的内联响应

1 个答案:

答案 0 :(得分:0)

Elasticsearch 2.x中的

this questionfiltered queries are deprecated成为一个称为查询的概念,它们同时充当查询和过滤器,具体取决于使用它们的上下文(更简单!)

您可以使用NEST 2.x重写您的查询( 与Elasticsearch 2.x 兼容

client.Search<Model>(a => a
    .Query(b => b
        .Bool(c => c
            .Filter(d => d
                .Script(e => e
                    .Inline("doc['firstname'].value == doc['lastname'].value")
                )
            )
        )
    )
);

可以使用查询描述符

上的+一元运算符进一步缩短
client.Search<Model>(a => a
    .Query(b => +b
        .Script(e => e
            .Inline("doc['firstname'].value == doc['lastname'].value")
        )
    )
);

两者都产生以下查询json

{
  "query": {
    "bool": {
      "filter": [
        {
          "script": {
            "inline": "doc['firstname'].value == doc['lastname'].value"
          }
        }
      ]
    }
  }
}

queries and filters have merged,因此您需要为内联脚本启用此功能。