在Solr中使用DataStax Enterprise中的Cassandra进行空间搜索

时间:2015-01-16 12:51:41

标签: xml solr cassandra schema datastax-enterprise

早上好,

我要做的是对数据进行空间搜索,该搜索存储在我的Cassandra数据库中,并使用DataStax Enterprise连接到Solr。

一些信息....我已经创建了数据库并存储了数据..我已经创建了一个solr核心,我可以使用Solr Admin在我的数据库中查询数据。

此时,我正在改变schema.xml,以便可以读取我的数据并执行空间查询。

我有几个问题,

1)我应该在Cassandra中使用哪种变量类型,以便能够通过cassandra正确读取我的纬度和经度点?

这就是我现在所拥有的 - 输入示例 -

- 我的latlng(经度纬度点)在cassandra中存储为varchar变量。

insert into device(id, location) VALUES('test','45.17614,-93.87341');

- 运行时仍然得到相同的结果:

"error": {
    "msg": "The field location does not support spatial filtering",
    "trace": "org.apache.solr.common.SolrException: The field location does not support spatial filtering
    "code": 500

}

2)这是我当前的schema.xml ----看起来对你来说是否正确?

*不确定我是否在正确的位置使用了dynamicField .....(也在字段部分尝试过)

这是我在solr admin中使用的查询....也在终端

上尝试过

{!geofilt pt=45.15,-93.85 sfield=location d=5} ----在管理员

上 终端上的

SELECT * FROM device WHERE solr_query='{!geofilt sfield=location pt=45.15,-93.85 d=5}' limit 10; -----

我的密钥空间是这样的:

创建KEYSPACE设备WITH REPLICATION = {' class':' NetworkTopologyStrategy',' Solr':1};

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<schema name="autoSolrSchema" version="1.5">
    <types>
        <fieldType class="org.apache.solr.schema.StrField" name="StrField"/>
        <fieldType class="solr.LatLonType" subFieldSuffix="_coordinate"     name="coord"/>
    </types>
    <fields>
        <field indexed="true" multiValued="false" name="id" stored="true" type="StrField"/>
        <field indexed="true" multiValued="false" name="location" stored="true" type="coord"/>
        <dynamicField name="*_coordinate" type="tdouble" indexed="true" stored="false"/>
    </fields>
    <uniqueKey>id</uniqueKey>
</schema>

谢谢!

1 个答案:

答案 0 :(得分:2)

  1. 根据DSE文档,LatLonType映射到Cassandra文本或varchar列类型。
  2. 检查Solr wiki以获取一些Solr示例: http://wiki.apache.org/solr/SpatialSearch

    1. 您的架构看起来很好,快速浏览一下。
    2. 错误消息引用的是与您指定的Solr架构不同的字段名称(&#34; mylocation&#34;)。&#34; location&#34;)。