2016-08-21 101 views
0

Elasticsearch使您能够查询存在于或不在这些索引上的字段上的多个索引。Elasticsearch带有地理边界框查询的多索引查询

但是,如果所查询的字段在所有请求的索引中都不存在,那么当查询多个带有geo_bounding_box弹性的索引时会抛出异常。

似乎弹性检查是否所需的字段映射为地理点。

有没有办法实现这个查询,而无需编辑映射并在所有indecies中添加所有geo_fileds?

+0

也许只包含搜索中包含地理域的索引。 – Val

+0

问题是,所有的索引都包含地理区域,但不具有相同的名称。例如索引A.x_location,索引B.y_location以及在两个字段中使用带有should的bool查询的查询。 – User1234

回答

1

您可以使用indices query排列如下bool/should。这样您就不会冒着用错误的字段名称查询索引的风险:

POST /indexA,indexB/_search 
{ 
    "query": { 
    "bool": { 
     "should": [ 
     { 
      "indices": { 
      "indices": [ 
       "indexA" 
      ], 
      "query": { 
       "geo_bounding_box": { 
       "x_location": {...}    } 
      } 
      } 
     }, 
     { 
      "indices": { 
      "indices": [ 
       "indexB" 
      ], 
      "query": { 
       "geo_bounding_box": { 
       "y_location": {...} 
       } 
      } 
      } 
     } 
     ] 
    } 
    } 
} 
+0

这是否适合您? – Val

+0

感谢您的回答。 它似乎工作,但现在我有奇怪的结果,使用应该返回来自两个索引的所有文件,将其更改为必须返回正确的文件,为什么多索引查询的布尔查询有区别? – User1234