elasticsearch 在Cassandra中存储地理位置详细信息和弹性搜索中存储索引的最佳方法?,elasticsearch,cassandra,geolocation,geopoints,elasticsearch,Cassandra,Geolocation,Geopoints" /> elasticsearch 在Cassandra中存储地理位置详细信息和弹性搜索中存储索引的最佳方法?,elasticsearch,cassandra,geolocation,geopoints,elasticsearch,Cassandra,Geolocation,Geopoints" />

elasticsearch 在Cassandra中存储地理位置详细信息和弹性搜索中存储索引的最佳方法?

elasticsearch 在Cassandra中存储地理位置详细信息和弹性搜索中存储索引的最佳方法?,elasticsearch,cassandra,geolocation,geopoints,elasticsearch,Cassandra,Geolocation,Geopoints,我是阿米特, 我的问题是 我想在Cassandra中存储与地理相关的详细信息,并将其索引存储在弹性搜索中,以便更快地访问。 我想存储国家名称、国家ISO代码、州/地区、城市名称以及纬度和经度。我可以使用geopoint在弹性搜索中存储Lat/long,但无法获得有关Cassandra的任何信息。数据类型应该是什么? 因此,请建议我如何在Cassandra/Elastic search中存储地理信息 Amit您可以使用Cassandra创建自己的用户定义类型 CREATE TYPE geopoin

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


Amit

您可以使用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)  
);
创建类型地质点(
双纬度,
经度加倍,
)
创建表格大地测量(
对象id uuid,
国家文本,
国家/地区iso法典文本,
国家文本,
区域文本,
城市文本,
位置冻结,
主键(对象id)
);

注意冻结的语法

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

您应该使用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文档地理空间查询

//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))\"" }';
有关更多参考,请使用此

仅供参考:在启动查询之前,设置Solr Core: