弹性搜索中未生成 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实现地理轨迹的空间搜索实现思路设计