我正在使用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"
}
}
}
}
但我得到的脚本并不支持使用嵌套
的内联响应答案 0 :(得分:0)
this question和filtered
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,因此您需要为内联脚本启用此功能。