我在 cassasndra 中有行,我将如何继续查询这些行以便在 solr 中对它们进行索引。为了在 cassandra 中查询所有这些行一次,我应该使用什么查询或什么方式?
2 回答
请在下面找到集成 Cassandra 和 Solr 的示例:
CREATE TABLE tutor (
id int,
name text,
org text,
dep text,
sal text,
place text,
PRIMARY KEY ((org),name)
)
cqlsh:test> select * FROM tutor;
org | name | dep | id | place | sal
------+------+------+----+---------+------
org1 | abc | dep1 | 1 | sanjose | 4500
org1 | bbb | dep1 | 2 | sanjose | 5500
org2 | ccc | dep1 | 3 | sanjose | 5500
org2 | ddd | dep2 | 4 | sanjose | 5500
org2 | eee | dep3 | 5 | sanjose | 4500
org2 | fff | dep4 | 6 | sanjose | 7500
SOLR 和 Cassandra 集成的要求:
SOLR 版本:
索尔 4.9.0
库/罐子:
卡桑德拉:
cassandra-all-1.2.5.jar
libthrift-0.6.0.jar
cassandra-thrift-1.2.5.jar
数据导入处理程序:
solr-dataimporthandler-4.9.0.jar
solr-dataimporthandler-extras-4.9.0.jar
mysql:
mysql-connector-java-5.1.31-bin.jar 在 Solor 中:以下要更新的文件:
• dataconfig.xml
• schema.xml
• solorconfig.xml
• dataconfig.xml
在这里,我们必须更新 CASSANDRA 的 JDBC 连接器。
< dataConfig>
< dataSource type="JdbcDataSource"
driver="org.apache.cassandra.cql.jdbc.CassandraDriver"
url="jdbc:cassandra://10.234.31.231:9160/test"
autoCommit="true"/>
< document name="content">
< entity name="test"
query="SELECT id,org,name,dep,place,sal from tutor" autoCommit="true">
< field column="id" name="id" />
< field column="org" name="org" />
< field column="name" name="name" />
< field column="dep" name="dep" />
< field column="place" name="place" />
< field column="sal" name="sal" />
< entity>
< document>
< dataConfig>
架构.xml
< field name="id" type="string" indexed="true" stored="true" required="true" />
< field name="org" type="string" indexed="true" stored="true" required="true" />
< field name="dep" type="string" indexed="true" stored="true" required="true" />
< field name="place" type="string" indexed="true" stored="true" required="true" />
< field name="sal" type="string" indexed="true" stored="true" required="true" />
Solorconfig.xml
< ! - - Add your library Path - →
< lib dir="/home/solr/lib" regex="solr-dataimporthandler-.*.jar" />
< lib dir="/home/solr/lib" regex="cassandra-jdbc-.*.jar" />
< lib dir="/home/solr/lib" regex="cassandra-all-.*.jar" />
< lib dir="/home/solr/lib" regex="cassandra-thrift-.*.jar" />
< lib dir="/home/solr/lib" regex="libthrift-.*.jar" />
. . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
< requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
< lst name="defaults">
< str name="config">dataconfigCassandra.xml
< /lst>
不确定您的设置如何(您使用的是哪种语言),但最好的方法可能是使用 Cassandra 客户端库并编写应用程序来查询 cassandra“列族”(表)的所有条目(行),然后编写您要从 Solr 中的每一行索引的数据。在这里,您可以很好地概述 cassandra 的几个客户端:http ://www.datastax.com/download/clientdrivers 。
要执行“读取所有条目”,您可以执行以下“本机查询”:
select * from columnfamilyname;
这在很大程度上取决于您使用的客户端库......但我想大多数客户端都允许您执行此类“本机查询”(例如您在 Cassandra cassandra-cli 或 cqlsh 中执行的查询)。
请注意执行此查询的数据库有多大...在这种情况下,如果您对它们进行索引/排序(按键),您可以执行如下查询:select * from columnfamily where indexkey > 101 limit 100 allow filtering
.
在 Solr 中创建“初始索引”后,很可能您还应该使用更新方法,以使用 Cassandra DB 的新条目来更新 solr 索引。