DSE:地理位置,即纬度和经度在 cassandra 中存储为不同的字段

Posted

技术标签:

【中文标题】DSE:地理位置,即纬度和经度在 cassandra 中存储为不同的字段【英文标题】:DSE: Geo location i.e latitude and longitude is stored as different fields in cassandra 【发布时间】:2018-11-30 08:51:40 【问题描述】:

我正在从 Apache Cassandra 升级到 Datastax Cassandra。计划在我的一张桌子上使用位置搜索功能。

当前表如下所示

CREATE TABLE tweets (
   id INT PRIMARY KEY,
   user TEXT,
   body TEXT,
   time TIMESTAMP,
   latitude FLOAT,
   longitude FLOAT
);

在示例 Datastax Solr config 中,我看到纬度和经度应该属于同一列。有没有办法可以索引 纬度和经度分开以便Solr能看懂?

【问题讨论】:

【参考方案1】:

我认为您可以通过使用Field Input Transformer (FIT) 来实现这一点 - 它允许转换提交给 Solr 的文档,因此您可以同时获取坐标并从中创建一个字段。请检查链接的文档 - 它有示例代码,应该不难实现。

附:您可以使用 RPT (RecursivePrefixTree) 而不是 LatLong 类型 - 它可能更有效。我也有 an example 如何在 DSE 中配置此字段类型(尽管我在 DSE 核心中使用 DSE 的 PointType)。

【讨论】:

【参考方案2】:

对于 solr 中的空间查询,您需要将纬度和经度逗号分隔存储在具有位置类型的字段中。

如果您尝试在字段类型位置中仅放置单个值,则会出现错误,如果您想使用 solr 的空间搜索,那么您必须将两者存储为仅在位置类型中以逗号分隔。

您可以使用 pfloat 或 pdouble 数据类型将这两个值存储在不同的字段中,但您不能使用 solr 的空间搜索功能来查找最近距离。

【讨论】:

以上是关于DSE:地理位置,即纬度和经度在 cassandra 中存储为不同的字段的主要内容,如果未能解决你的问题,请参考以下文章

使用gps从纬度和经度获取当前位置

如何从经度和纬度中筛选国家?

如何在谷歌地图API中获取高速公路和道路的纬度和经度

使用距离和纬度和经度计算位置

如何从纬度/经度获取附近的位置?

Java程序中的位置计数问题