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 架构

Solr 7 - 如何使用地理空间搜索进行全文搜索

Cassandra和Solr集成使用JDBC:org.apache.thrift.transport.TTransportException

Cassandra SOLR 滚动升级

Solr与Cassandra二级缓存实践