弹性搜索中未生成 Geohash

Posted

技术标签:

【中文标题】弹性搜索中未生成 Geohash【英文标题】:Geohash not generated in Elastic search 【发布时间】:2015-05-25 15:39:37 【问题描述】:

我创建了一个索引如下:

POST /cabtrails

  "settings" :

  "number_of_shards" : 3,
  "number_of_replicas" : 1
 ,
"mappings" : 
"cabtrail" :
  "properties" : 
        "location": 
            "type":               "geo_point",
            "geohash_prefix":     true, 
            "geohash_precision":  "5m" 
          ,
          "capture_time": 
                "type" : "long"

            ,
          "client_id": 
            "type" : "long"

          
       
     
   

它工作正常并创建了一个索引。

我输入了一份示例文档:

POST cabtrails/cabtrail

    "capture_time": 1431849367077,
    "client_id": 865527029812357,
    "location": "13.0009316,77.5947316"

这也很好用。 在这里,我期望 ElasticSearch 会生成一个我可以使用的 geohash 字段/条目。

但是,当我查询时,我得到了这个:

GET cabtrails/_search

   "took": 2,
   "timed_out": false,
   "_shards": 
      "total": 3,
      "successful": 3,
      "failed": 0
   ,
   "hits": 
      "total": 1,
      "max_score": 1,
      "hits": [
         
            "_index": "cabtrails",
            "_type": "cabtrail",
            "_id": "AU2LrEaze2aqxPjHm-UI",
            "_score": 1,
            "_source": 
               "capture_time": 1431849367077,
           "client_id": 865527029812357,
           "location": "13.0009316,77.5947316"
        
     
      ]
   

我希望在查询结果中的某处出现像 u10hbp 这样的地理哈希字符串,我可以用它来查询未来的位置点。还是我对 geohash+ES 的概念搞砸了??救命!!

【问题讨论】:

【参考方案1】:

根据document 在 geo_point 中启用 geohash 标志索引 geohash 值。

索引的内容与响应的 _source 字段所代表的内容有所不同。

响应中的 _source 字段是传递给 elasticsearch 索引的原始原始 json 文档。

当您启用 geohash 标志时,geo_point 类型将使用 geohash 表示进行索引,但实际源文档不会更改

要了解 geohash 标志如何补充 geo_point 类型的索引方式,您可以使用 fielddata_fields api:

对于上面的示例,它会在以下几行中显示:

**Query**
POST cabtrails/_search


    "fielddata_fields" :["location","location.geohash"]

回应:

"hits": 
      "total": 1,
      "max_score": 1,
      "hits": [
         
            "_index": "cabtrails",
            "_type": "cabtrail",
            "_id": "AU2NRn_OsXnJTKeurUsn",
            "_score": 1,
            "_source": 
               "capture_time": 1431849367077,
               "client_id": 865527029812357,
               "location": "13.0009316,77.5947316"
            ,
            "fields": 
               "location": [
                  
                     "lat": 13.0009316,
                     "lon": 77.5947316
                  
               ],
               "location.geohash": [
                  "t",
                  "td",
                  "tdr",
                  "tdr1",
                  "tdr1v",
                  "tdr1vw",
                  "tdr1vww",
                  "tdr1vwwz",
                  "tdr1vwwzb",
                  "tdr1vwwzbm"
               ]
            
         
      ]
   

【讨论】:

以上是关于弹性搜索中未生成 Geohash的主要内容,如果未能解决你的问题,请参考以下文章

Hbase geohash实现地理轨迹的空间搜索实现思路设计

Hbase geohash实现地理轨迹的空间搜索实现思路设计

Hbase geohash实现地理轨迹的空间搜索实现思路设计

算法进阶系列1 空间搜索 GeoHash 算法

有没有办法通过放大 GraphQL 转换 @searchable 注释来控制自动生成的弹性搜索索引?

如何将弹性搜索索引的响应保存到 s3 存储桶中