【问题标题】:How to select rows in cassandra for indexing in solr如何在 cassandra 中选择行以在 solr 中进行索引
【发布时间】:2013-07-29 03:55:57
【问题描述】:

我在 cassasndra 中有行,我将如何继续查询这些行以便在 solr 中对它们进行索引。为了在 cassandra 中查询所有这些行一次,我应该使用什么查询或什么方式?

【问题讨论】:

  • 您使用的是哪个版本的 Cassandra?您所说的“查询一次”是什么意思?如果行更改了它们的内容,您不想在 solr 中更新数据?
  • 我的意思是一次然后我会重复整个过程更新 solr 中的数据,所以至少一次

标签: solr cassandra


【解决方案1】:

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

库/罐子:

卡桑德拉:

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>

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>

【讨论】:

  • 这会自动获取对 cassandra 数据的更改吗?
  • 为什么包含一个mysql连接器jar?需要mysql实例吗?
  • 我必须在哪里复制这些文件?
  • 添加Lib/Jar下的所有Jar文件
  • 我想知道我们将如何在最新版本中做到这一点?这些文件的路径是什么? dataconfig.xml、schema.xml、solorconfig.xml
【解决方案2】:

不确定您的设置如何(您使用的是哪种语言),但最好的方法可能是使用 Cassandra 客户端库并编写一个应用程序来查询您的 cassandra“列族”(表)的所有条目(行)然后从 Solr 中的每一行写入要索引的数据。在这里,您可以很好地概述 cassandra 的几个客户端:http://www.datastax.com/download/clientdrivers

要执行“读取所有条目”,您可以执行以下“本机查询”:

select * from columnfamilyname;

这在很大程度上取决于您使用的客户端库...但我想大多数客户端都允许您执行此类“本机查询”(例如您在 Cassandra cassandra-cli 或 cqlsh 中执行的查询)。

请注意执行此查询的数据库有多大...在这种情况下,如果您对它们进行索引/排序(按键),您可以执行如下查询:select * from columnfamily where indexkey &gt; 101 limit 100 allow filtering

在 Solr 中创建“初始索引”后,很可能您还应该使用更新方法,以使用 Cassandra DB 的新条目来更新 solr 索引。

【讨论】:

  • 这是我的问题,如果我有一个大 DB select * from column 它不适合我的记忆,我不能像在 mysql 中那样使用例如 limit 500,10 的查询'不存在于 cassandra
  • 是的,您可以在 cassandra limit 500 中做到这一点...没问题! - 例如:select * from columnname limit 500... 但是,您需要根据键开发不同的东西,以便您可以间隔读取它们,例如,如果您按“日期”/“时间”存储它们,您可以阅读第一个500,然后从上次看到的限制为 500 的下一个查询......等等。你能在你的表中这样做吗?
  • 你不能只用列而不用行吗?我的意思是索引它们并按时间排序保存它们,然后用limit 做那件事。问题是您只能连续保存 20 亿列。你也可以用行来做吗?就像在单个 id 键表部分 http://rollerweblogger.org/roller/entry/composite_keys_in_cassandra 中一样。即使分数被索引,你能做一个select * from bite where score&gt; 101 limit 100 吗?我试过了,不行。我是不是听不懂你说什么,是不是我做错了什么?
  • 我对我的答案进行了更新......当我提到“列”时,我的意思是“列族”(或“表”),对不起......这个想法确实是为了索引具有单个或复合键的行。然后你可以查询它(但如果它们不是“有序”的,你可能会遇到问题)。如果它们被索引/排序(在您的示例中按分数),您可以执行查询,例如您推荐的查询,只需要“允许过滤”:select * from bite where score &gt; 101 limit 100 allow filtering 应该可以工作。
猜你喜欢
  • 1970-01-01
  • 2014-01-19
  • 2017-09-06
  • 1970-01-01
  • 1970-01-01
  • 2014-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多