Solr Cassandra 空间搜索 - 无法获得任何结果
Posted
技术标签:
【中文标题】Solr Cassandra 空间搜索 - 无法获得任何结果【英文标题】:Solr Cassandra spatial Search - Can't get any result 【发布时间】:2017-11-02 09:56:58 【问题描述】:您好几天来,我一直在努力从我的空间搜索查询中获得任何结果。
谁能告诉我我做错了什么
我使用 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' );
然后我将架构 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';
答案是“没有结果”。
知道我能做什么吗?谢谢!
【问题讨论】:
【参考方案1】:如果您在架构中执行任何类型的更改,您需要再次重新索引数据。
嗯,并非所有情况都如此,例如,您可以添加一个新字段,并且您不需要重新索引,您的旧文档将没有该字段。但是,当您更改字段的类型/分析或“存储”等属性时,您需要重新索引以便更改生效。
例子:
curl "http://10.1.2.3:8983/solr/admin/cores?action=RELOAD
&name=keyspace.table&reindex=true&deleteAll=false"
【讨论】:
【参考方案2】:您也可以使用dsetool
重新索引核心,例如
dsetool reload_core keyspace_name.table_name reindex=true deleteAll=false
请注意,如果您的集群有多个 DC,您需要在每个数据中心上执行一次。
在此处参考 DSE5.0 文档以获取 reindexing in place
【讨论】:
以上是关于Solr Cassandra 空间搜索 - 无法获得任何结果的主要内容,如果未能解决你的问题,请参考以下文章
使用 datastax 进行错误的 SOlr 索引。从 1 个节点扩展到 2 个 cassandra 节点和 1 个搜索节点
无法使用 cassandra datastax 生成 solr 架构
Cassandra和Solr集成使用JDBC:org.apache.thrift.transport.TTransportException