首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >elassandra地理点映射失败

elassandra地理点映射失败
EN

Stack Overflow用户
提问于 2018-01-15 06:10:59
回答 2查看 153关注 0票数 1

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

geopoint:

代码语言:javascript
复制
manageESIndex: true,
udts: {
  geopoint: {
    lat: 'double',
    lon: 'double'
  }
}

cassandra表弹性映射:

代码语言:javascript
复制
location: {
  type: 'frozen',
  typeDef: '<geopoint>'
}
...
es_index_mapping: {
  discover: '.*',
  properties: {
    "location": {
      "type": "geo_point"
    }
  }
}

由此产生的弹性映射为:

代码语言:javascript
复制
"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,而是产生经度/经度对。这在尝试执行距离搜索时不起作用。似乎在使用“discover”时,映射属性被忽略了。

EN

回答 2

Stack Overflow用户

发布于 2019-01-05 09:47:39

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

文档中说,当您使用:

代码语言:javascript
复制
discover: '.*'

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

代码语言:javascript
复制
properties: {
  <column-name>: {
    type: '<specific-type>',
    cql_collection: 'singleton'
  }
}

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

我发现,只拼写所有列并以这种方式创建映射要容易得多,而不使用discover: ...字段。

但是,我只使用了一次discover: ...来获取默认映射,并知道应该在自己的定义中使用什么。然而,这通常是错误的,我需要做一些小的调整。然而,最终,一旦我删除了discover: '.*'行,它对我来说就很好用。

有一件事非常重要,那就是"cql_collection": "singleton"。如果没有它,默认情况下会将列创建为set<>list<>,而不是普通的inttext等。他们在文档中说,这是因为这是Elasticsearch对数据的期望。我可以想象,拥有set<>list<>将使事情变得更加复杂,更难读/写。我想我必须进行测试,看看它是否与相应的基准测试一起工作得更好……

票数 2
EN

Stack Overflow用户

发布于 2020-02-22 07:25:55

您可以从here中找到结合使用geo_point数据类型和elassandra的真实示例

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48254682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档