弹性搜索无法匹配数组

时间:2015-11-13 18:11:30

标签: elasticsearch

我尝试使用以下结构搜索文档:

  {
        "_index": "XXX",
        "_type": "business",
        "_id": "1252809",
        "_score": 1,
        "_source": {
           "url": "http://Samuraijapanese.com",
           "raw_name": "Samurai Restaurant",
           "categories": [
              {
                 "name": "Cafe"
              },
              {
                 "name": "Cajun Restaurant"
              },
              {
                 "name": "Candy Stores"
              }
           ],
           "location": {
              "lat": "32.9948649",
              "lon": "-117.2528171"
           },
           "address": "979 Lomas Santa Fe Dr",
           "zip": "92075",
           "phone": "8584810032",
           "short_name": "samurai-restaurant",
           "name": "Samurai Restaurant",
           "apt": "",
           "state": "CA",
           "stdhours": "",
           "city": "Solana Beach",
           "hours": "",
           "yelp": "",
           "twitter": "",
           "closed": 0
        }
     }

搜索url,raw_name,地址等等都可以,但搜索类别不会返回任何内容。我试图像这样搜索:如果我为categories.name切换其他任何东西,它可以工作:

"query": {
  "filtered" : {
     "filter" : {
        "geo_distance" : {
           "location" : {
              "lon" : "-117.15726",
              "lat" : "32.71533"
           },
           "distance" : "5mi"
        }
     },
     "query" : {
        "multi_match" : {
           "query" : "Cafe",
           "fields" : [
              "categories.name"
           ]
        }
     }
  }


 },
  "sort": [
    {
     "_score" : {
        "order" : "desc"
     }
    },
    {
      "_geo_distance": {
        "location": {
          "lat": 32.71533,
          "lon": -117.15726
        },
        "order": "asc",
        "sort_mode": "min"
      }
    }
  ],
  "script_fields": {
    "distance_from_origin": {
      "script": "doc['location'].arcDistanceInKm(32.71533,-117.15726)"
    }
  },
  "fields": ["_source"],
  "from": 0,
  "size": 10
}

如果我切换出例如具有地址的categories.name,并将搜索词更改为Lomas,则返回结果

1 个答案:

答案 0 :(得分:0)

如果没有看到您的类型映射,我无法明确回答,但我猜您已将类别映射为nested。查询nested类型的子文档(与object相对)时,您必须使用nested query