将ElasticSearch多索引查询转换为NEST查询时出现问题
本文关键字:查询 问题 NEST 转换 ElasticSearch 索引 | 更新日期: 2023-09-27 18:24:02
Sense中的以下查询返回我要查找的结果,但当我将其转换为NEST查询时,我总是收到0个结果。我哪里错了?
GET /event,meeting,executive,list,call/_search
{
"query": {
"filtered": {
"query": {
"bool": {
"should": [
{
"match": {
"name": "sample query"
}
},
{
"match": {
"agenda": "sample query"
}
}
]
}
},
"filter": {
"query": {
"match": {
"symbol": "SAMPLESYMBOL"
}
}
}
}
}
}
这里是我使用的NEST搜索描述符,它总是返回0个结果。
return arg.Indices(new[] { "event", "meeting", "executive", "list", "call" })
.Size(size)
.Filter(f => f.Query(qu => qu.Match(m => m.OnField("symbol").Query("SAMPLESYMBOL"))))
.Query(q => q
.Bool(b => b
.Should(
s => s.Match(m => m.Query(query).OnField("name")),
s => s.Match(m => m.Query(query).OnField("agenda")))));
在Sense中工作的查询是一个过滤查询,而在NEST中,除了过滤器之外,您还执行一个查询。这可能就是问题所在。
试试这个,它应该会生成与您在Sense:中运行的查询等效的JSON
.Indices(new[] { "event", "meeting", "executive", "list", "call" })
.Size(size)
.Query(q => q
.Filtered(f => f
.Query(qq => qq
.Bool(b => b
.Should(s => s.Match(m => m.OnField("name").Query(query)))
.Should(s => s.Match(m => m.OnField("agenda").Query(query)))
)
)
.Filter(ff => ff
.Query(qf => qf
.Match(m => m.OnField("symbol").Query("SAMPLESYMBOL"))
)
)
)
);