我正在从elasticsearch 1.7升级到5.0。其中一个更改是删除筛选的查询以支持bool查询。例如,我在旧版本的ES中使用了此搜索哈希:
{
"sort": [ { "updated_at" => "desc" } ],
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{ "term": { "account_id" => 2 } },
{ "bool": {
"should": [
{ "missing": { "field": "workgroup_ids" } },
{ "term": { "visibility": 2 } }
]
}
}
],
"must_not": [
{ "range": { "expires_at": { "lte": "2016-11-17T16:27:22Z" } } },
{ "range": { "published_at": { "gte": "2016-11-17T16:27:22Z" } } }
]
}
},
"query": {
"bool": {
"must": [
{ "query_string": { "query": "name:(*orang.jpg*)" } }
]
}
}
}
}}
所以,我知道这需要更多的格式:
{ "query": "bool": [{ term: { account_id: 2 } }]}
我也知道缺少的查询需要用5中的must_not exists查询替换。那就是说,我无法弄清楚如何转换这个重度嵌套的哈希,所以有人知道如何正确地为ES5构造这个?
我也在使用elasticsearch-rails gem,fyi。
在Rails中使用/访问ES答案 0 :(得分:0)
我认为你可以简单地改变它,它应该有效:
{
"sort": [
{
"updated_at": "desc"
}
],
"query": {
"bool": {
"must": [
{
"query_string": {
"query": "name:(*orang.jpg*)"
}
}
],
"must_not": [
{
"range": {
"expires_at": {
"lte": "2016-11-17T16:27:22Z"
}
}
},
{
"range": {
"published_at": {
"gte": "2016-11-17T16:27:22Z"
}
}
}
],
"filter": [
{
"bool": {
"minimum_should_match": 1,
"should": [
{
"bool": {
"must_not": {
"exists": {
"field": "workgroup_ids"
}
}
}
},
{
"term": {
"visibility": 2
}
}
]
}
},
{
"term": {
"account_id": 2
}
}
]
}
}
}