无法解析搜索源,预期字段名称但得到[START_OBJECT]

时间:2016-02-27 21:10:48

标签: amazon-web-services elasticsearch

我的搜索主体:

{
   "query":{
      "filtered":{
         "filter":{
            "bool":{
               "should":[
                  {
                     "term":{
                        "categories":2
                     }
                  },
                  {
                     "term":{
                        "categories":5                         
                     }
                  }
               ]
            }
         }
      },
      "bool":{
         "should":[
            {
               "match":{
                  "name":"perferendis"
               }
            },
            {
               "match":{
                  "brand":"in"
               }
            }
         ]
      }
   },
   "filter":{
      "and":{
         "filters":[
            {
               "bool":{
                  "must_not":{
                     "term":{
                        "condition":1
                     }
                  }
               }
            },
            {
               "range":{
                  "highest_sales_rank":{
                     "gte":96
                  }
               }
            },
            {
               "range":{
                  "review_rating":{
                     "gte":1
                  }
               }
            },
            {
               "range":{
                  "review_count":{
                     "gte":12
                  }
               }
            },
            {
               "range":{
                  "upper_price":{
                     "gte":68
                  }
               }
            },
            {
               "bool":{
                  "must_not":{
                     "term":{
                        "updated_at":0
                     }
                  }
               }
            }
         ]
      }
   },
   "sort":{
      "updated_at":"asc"
   },
   "size":10,
   "from":40
}

但是,如果我取出过滤后的部分,查询会成功

"filtered":{
         "filter":{
            "bool":{
               "should":[
                  {
                     "term":{
                        "categories":2
                     }
                  },
                  {
                     "term":{
                        "categories":5                         
                     }
                  }
               ]
            }
         }
      },

我之前使用过这种格式:

"filter":{
  "bool":{
     "should":[
        {
           "match":{
              "categories":"16310211"
           }
        },
        {
           "match":{
              "categories":"493964"
           }
        }
     ]
  }
},

但它仅适用于弹性搜索2,并且由于AWS仅支持1.5.6我无法使用此格式,与我之前的问题相关Narrowing search result to multiple categories

1 个答案:

答案 0 :(得分:1)

查询DSL在版本1.x和2.x之间有变化,您是否需要更改查询,我做了一个例子。

{
   "query": {
      "filtered": {
         "filter": {
            "bool": {
               "should": [
                  {
                     "term": {
                        "categories": 2
                     }
                  },
                  {
                     "term": {
                        "categories": 5
                     }
                  },
                  {
                     "bool": {
                        "should": [
                           {
                              "match": {
                                 "name": "perferendis"
                              }
                           },
                           {
                              "match": {
                                 "brand": "in"
                              }
                           }
                        ]
                     }
                  }
               ],
               "must": [
                  {
                     "range": {
                        "highest_sales_rank": {
                           "gte": 96
                        }
                     }
                  },
                  {
                     "range": {
                        "review_rating": {
                           "gte": 1
                        }
                     }
                  },
                  {
                     "range": {
                        "review_count": {
                           "gte": 12
                        }
                     }
                  },
                  {
                     "range": {
                        "upper_price": {
                           "gte": 68
                        }
                     }
                  }
               ],
               "must_not": [
                  {
                      "term": {
                        "condition":1
                      }
                  },
                  {
                     "term":{
                        "updated_at":0
                     }
                  }
               ]
            }
         }
      }
   },
   "sort":{
      "updated_at":"asc"
   },
   "size":10,
   "from":40
}

我删除了你的AND过滤器,AND过滤器没有以良好的方式缓存。 随意提出一些问题。