在弹性搜索中存储Cassandra和Indexes中Geo位置详细信息的最佳方法?

时间:2016-01-19 09:34:39

标签: elasticsearch cassandra geolocation geopoints

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

阿米特

2 个答案:

答案 0 :(得分:0)

您可以使用 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)  
);

注意冻结&lt; geopoint&gt; 语法

答案 1 :(得分:0)

如果您只想存储lat-lng,则@doandyhai提出的解决方案是很好的,但是在查询数据时不会有帮助。

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

//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