在 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 中存储索引的最佳方式?的主要内容,如果未能解决你的问题,请参考以下文章
Mysql建立数据库如和在一个指定的位置建立数据库,如何指定数据库默认的存储位置