Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在cassandra中选择行以在solr中建立索引_Solr_Cassandra - Fatal编程技术网

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

如何在cassandra中选择行以在solr中建立索引,solr,cassandra,Solr,Cassandra,我在Cassandra中有行,我将如何继续查询这些行,以便对它们进行索引,例如在solr中。为了一次性查询cassandra中的所有行,我应该使用什么查询或什么方式?不确定您的设置如何(您使用的是哪种语言),但最好是使用cassandra客户端库并编写一个应用程序来查询cassandra“列族”(表)中的所有条目(行)然后从Solr中的每一行写入要索引的数据。在这里,您可以很好地概述cassandra的几个客户端: 要执行“读取所有条目”,可以执行以下“本机查询”: 这将在很大程度上取决于您使用

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

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

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

这将在很大程度上取决于您使用的客户端库。。。但我想大多数客户端都允许您执行这种“本机查询”(就像您在Cassandra Cassandra cli或cqlsh中执行的查询)

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


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

请查找下面的示例以集成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/Jar:

卡桑德拉:

卡桑德拉-all-1.2.5.jar

libthrift-0.6.0.jar

cassandra-thrift-1.2.5.jar

Daata导入处理程序:

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


您使用的是哪个版本的Cassandra?“查询一次”是什么意思?如果行更改了其内容,您不想在solr中更新数据吗?我的意思是一次,然后我会重复整个过程在solr中更新数据,所以至少有一次这是我的问题,如果我有一个大DB
select*from column
它不适合我的内存,我也不能像mysql一样在cassandrayes中不存在的查询,比如
limit 500,10
,你可以在cassandra中这样做
limit 500
。。。没问题e、 g.:
从columnname limit 500中选择*。。。但是,您需要根据键开发一些不同的内容,以便可以按时间间隔读取它们,例如,如果您按“日期”/“时间”存储它们,则可以读取前500个,然后从上次看到的限制为500的下一次查询。。。等等。你能在你的表中这样做吗?你不能只对列而不是行这样做吗?我的意思是索引它们并按时间排序保存它们,然后使用
limit
执行该操作。问题是您一行只能保存20亿列。你也能用行来做吗?与单id键表部分类似。即使分数已编入索引,您是否可以执行
从分数>101限制100的咬合中选择*
?我试过了,你不能。我是不是不明白你说的,我是不是做错了什么?我更新了我的答案。。。当我提到“列”时,我指的是“列族”(或“表”),对不起。。。这个想法实际上是用单个或复合键对行进行索引。然后您可以查询它(但如果它们不是“有序的”,那么您可能会遇到问题)。如果它们被索引/排序(在您的示例中,按分数),您可以执行一个查询,比如您引用的查询,只需要“允许过滤”:
select*from-bite where-score>101 limit 100 allow-filtering
,应该可以工作。这会自动识别对cassandra数据的更改吗?为什么会包括mysql连接器jar?是否需要mysql实例?我必须在哪里复制这些文件?将所有Jar文件添加到Lib/Jar下。我想知道在最新版本中我们如何做到这一点?这些文件的路径是什么?dataconfig.xml、schema.xml、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>