1

我无法使用 elassandra 和 cassandra-express 驱动程序映射地理点。

地理点 UDT:

manageESIndex: true,
udts: {
  geopoint: {
    lat: 'double',
    lon: 'double'
  }
}

cassandra 表弹性映射:

location: {
  type: 'frozen',
  typeDef: '<geopoint>'
}
...
es_index_mapping: {
  discover: '.*',
  properties: {
    "location": {
      "type": "geo_point"
    }
  }
}

生成的弹性映射是:

"location": {
    "type": "nested",
    "cql_collection": "singleton",
    "cql_udt_name": "geopoint",
    "properties": {
        "lat": {
            "type": "double",
            "cql_collection": "singleton"
        },
        "lon": {
            "type": "double",
            "cql_collection": "singleton"
        }
    }
}

可以看出,映射不会产生geo_point,而是产生纬度/经度对。这在尝试进行距离搜索时不起作用。似乎在使用“发现”时,映射属性被忽略了。

4

2 回答 2

2

我用不同的类型/列遇到了类似的问题。

该文档说,当您使用时:

discover: '.*'

它会发现所有列,但您可以使用以下命令覆盖

properties: {
  <column-name>: {
    type: '<specific-type>',
    cql_collection: 'singleton'
  }
}

事实是,覆盖实际上并没有发生。(尝试使用 Elassandra 的最新版本 6.2.3.8。)

我发现只需拼出所有列并以这种方式创建我的映射并且从不使用该discover: ...字段要容易得多。

但是,我使用discover: ...once 来获取默认映射并了解我应该在自己的定义中使用什么。但是,通常情况下,它有些错误,我需要做一些小的调整。discover: '.*'然而,最后,一旦我删除了这条线,它对我来说非常有用。

非常重要的一件事是"cql_collection": "singleton". 没有它,默认情况下将列创建为set<>orlist<>而不是普通的intortext等​​。他们在文档中说这是因为 Elasticsearch 期望数据是这样的。我想拥有set<>list<>将会使事情变得更加复杂和难以读/写。我想我必须通过相应的基准测试来测试它是否能更好地工作......

于 2019-01-05T01:47:39.103 回答
0

您可以从此处找到使用geo_point数据类型的真实示例elassandra

于 2020-02-21T23:25:54.587 回答