我无法使用elassandra和cassandra-express驱动程序映射地理位置。
geopoint:
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,而是产生经度/经度对。这在尝试执行距离搜索时不起作用。似乎在使用“discover”时,映射属性被忽略了。
发布于 2019-01-05 09:47:39
我用不同的类型/列遇到了类似的问题。
文档中说,当您使用:
discover: '.*'它会发现所有列,但您可以使用以下命令覆盖:
properties: {
<column-name>: {
type: '<specific-type>',
cql_collection: 'singleton'
}
}事实是覆盖实际上并没有发生。(尝试使用Elassandra的最新版本6.2.3.8。)
我发现,只拼写所有列并以这种方式创建映射要容易得多,而不使用discover: ...字段。
但是,我只使用了一次discover: ...来获取默认映射,并知道应该在自己的定义中使用什么。然而,这通常是错误的,我需要做一些小的调整。然而,最终,一旦我删除了discover: '.*'行,它对我来说就很好用。
有一件事非常重要,那就是"cql_collection": "singleton"。如果没有它,默认情况下会将列创建为set<>或list<>,而不是普通的int或text等。他们在文档中说,这是因为这是Elasticsearch对数据的期望。我可以想象,拥有set<>或list<>将使事情变得更加复杂,更难读/写。我想我必须进行测试,看看它是否与相应的基准测试一起工作得更好……
发布于 2020-02-22 07:25:55
您可以从here中找到结合使用geo_point数据类型和elassandra的真实示例
https://stackoverflow.com/questions/48254682
复制相似问题