在 Cassandra 中存储地理位置详细信息和在 Elastic Search 中存储索引的最佳方式?

Posted

技术标签:

【中文标题】在 Cassandra 中存储地理位置详细信息和在 Elastic Search 中存储索引的最佳方式?【英文标题】:Best way to store Geo locations details in Cassandra and Indexes in Elastic Search? 【发布时间】:2016-01-19 09:34:39 【问题描述】:

阿米特在这里, 我的问题是 我想将与地理相关的详细信息存储在 Cassandra 中,并将它们的索引存储在 Elastic 搜索中,以便更快地访问。 我想存储国家名称、国家 ISO 代码、州/地区、城市名称以及纬度和经度。我可以在弹性搜索中使用地理点来存储纬度/经度,但无法获得有关 Cassandra 的任何信息。数据类型应该是什么? 所以请建议我在 Cassandra / Elastic 搜索中存储地理详细信息的方法

阿米特

【问题讨论】:

【参考方案1】:

您可以使用 Cassandra

创建自己的用户定义类型
CREATE TYPE geopoint (
   latitude double,
   longitude double,
)

CREATE TABLE geodetails(
     object_id uuid,
     country text,
     country_iso_codex text,
     state text,
     region text,
     city text,
     location frozen<geopoint>,
     PRIMARY KEY(object_id)  
);

注意frozen语法

【讨论】:

【参考方案2】:

@doandyhai 提出的解决方案如果您只想存储 lat-lng 但对查询数据没有帮助。

您应该使用 PointType 来存储 lat-lng,并且在此之上,您可以执行地理空间查询。

//CREATE TABLE
CREATE TABLE test (
id text PRIMARY KEY, 
point 'PointType', 
linestring 'LineStringType');

// Insert Query
INSERT INTO test (id, point, linestring) 
VALUES ('1', 'POINT(5 50)', 'LINESTRING (30 10, 10 30, 40 40)' );

//Find points within a 10 unit radius from point (4, 49):
SELECT * FROM test 
WHERE solr_query= ' "q":"*:*", "fq":"point:\"IsWithin(BUFFER(POINT(4.0 49.0), 10.0))\"" ';

来源:Datastax Cassandra Docs 地理空间查询。

更多参考请使用link

仅供参考:在触发查询之前设置 Solr Core:https://docs.datastax.com/en/archived/datastax_enterprise/5.0/datastax_enterprise/srch/creatingCoreCustomIndexResources.html

【讨论】:

以上是关于在 Cassandra 中存储地理位置详细信息和在 Elastic Search 中存储索引的最佳方式?的主要内容,如果未能解决你的问题,请参考以下文章

Cassandra中的一对多映射

Mysql建立数据库如和在一个指定的位置建立数据库,如何指定数据库默认的存储位置

Mysql建立数据库如和在一个指定的位置建立数据库,如何指定数据库默认的存储位置

存储 HTML5 地理位置数据

低成本搭建多可用区域高可用Cassandra集群

副本存储在cassandra环中的哪个节点?