如何在cassandra中选择行以在solr中进行索引

时间:2013-07-29 11:20:33

标签: solr cassandra

我在cassasndra中有行,我如何继续查询这些行以便例如在solr中索引它们。我应该使用什么查询或以何种方式查询cassandra中的所有行?

2 个答案:

答案 0 :(得分:4)

请在下面找到集成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版本:

solr 4.9.0

LIB /罐:

卡珊德拉:

卡桑德拉-全1.2.5.jar

libthrift-0.6.0.jar

卡桑德拉-节俭1.2.5.jar

Daata Import Handler:

的solr-dataimporthandler-4.9.0.jar

的solr-dataimporthandler-额外-4.9.0.jar

MySQL的:

MySQL的连接器的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>

schema.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>

答案 1 :(得分:2)

不确定您的设置(您使用的是哪种语言),但最好的方法是使用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索引。