Solr Cassandra空间搜索 - 无法获得任何结果

时间:2017-06-01 09:56:14

标签: solr cassandra schema datastax

大家好,我几天来一直在努力从我的空间搜索查询中获得任何结果。

任何人都可以告诉我我做错了吗

我使用Datastax DSE 5.0.0

首先我创建我的cassandra表

CREATE TABLE mytable.test (
id varchar PRIMARY KEY,
latlon varchar
city varchar,
);

工作正常。 然后我插入一些数据:

insert into mytable.test (id, latlon, city) values ('1', '48.87,2.29','Paris 17' );
insert into mytable.test (id, latlon, city) values ('2', '48.86,2.29','Paris 16' );
insert into mytable.test (id, latlon, city) values ('3', '48.84,2.29','Paris 15' );
insert into mytable.test (id, latlon, city) values ('4', '48.86,2.33','Paris 1' );

然后我将schema xml(使用Notepad ++)更改为:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<schema name="test" version="1.1">
<types>
<fieldType class="org.apache.solr.schema.StrField" name="StrField"/>
<fieldType class="org.apache.solr.schema.TextField" name="TextField">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
      <fieldType name="coord" class="solr.LatLonType" subFieldSuffix="_coordinate" />
      <fieldType name="tdouble" class="solr.TrieDoubleField" precisionStep="8" positionIncrementGap="0" />
</types>
<fields>
<field indexed="true" multiValued="false" name="id" stored="true" type="StrField"/>
<field indexed="true" multiValued="false" name="city" stored="true" type="TextField"/>
<field indexed="true" multiValued="false" name="latlon" stored="true" type="coord"/>
<dynamicField name="*_coordinate" type="tdouble" indexed="true" stored="false" />
</fields>
<defaultSearchField>city</defaultSearchField>
<uniqueKey>id</uniqueKey>
</schema>

我使用此命令将此架构发送给Solr:

curl http://myhost:8983/solr/resource/mytable.test/schema.xml --data-binary @schema.xml -H 'Content-type:text/xml; charset=utf-8'

然后我重新加载Schema.xml

http://myhost:8983/solr/admin/cores?action=RELOAD&core=mytable.test

我想现在一切都应该准备好了。但是我不可能得到任何回报。

select * from mytable.test where solr_query = '{!geofilt sfield=latlon pt=48.87,2.29 d=5}';

答案是“没有结果”。

知道我能做什么吗?谢谢!

2 个答案:

答案 0 :(得分:2)

如果您在架构中执行任何类型的更改,则需要重新索引数据。

嗯,对于所有情况都不是这样,例如你可以添加一个新字段,而你不需要重新索引,你的旧文档就不会有那个字段。但是,当您更改字段的类型/分析或“存储”等属性时,您需要重新编制索引,以便更改启动。

示例:

curl "http://10.1.2.3:8983/solr/admin/cores?action=RELOAD &name=keyspace.table&reindex=true&deleteAll=false"

答案 1 :(得分:1)

您还可以使用getnextchar重新编制核心索引,例如

dsetool

请注意,如果您的群集有多个DC,则需要在每个数据中心执行一次

此处为reindexing in place

参考DSE5.0文档