2011-11-21 65 views
2

我想這個查詢從卡桑德拉獲取數據:卡桑德拉是索引表達式查詢不起作用

$cf=new ColumnFamily($data->cp,'ips'); 
$index[]=CassandraUtil::create_index_expression('c',1,'EQ'); 
$index[]=CassandraUtil::create_index_expression('begin_ip',1599147740,'GTE'); 
$index[]=CassandraUtil::create_index_expression('end_ip',1599147740,'LTE'); 
$index_clause = CassandraUtil::create_index_clause($index); 
$rows=$cf->get_indexed_slices($index_clause); 
foreach($rows AS $key=>$row) 
{ 
    $result[]=$row; 
} 
var_dump($result); 

但結果是。 我非常肯定,有一行cf ips絕對回答這個問題。

所有列的驗證等級爲IntegerType

在卡桑德拉-CLI平等查詢:

get ips where c = int('1') and 
    begin_ip <= int('1599147740') and 
    end_ip >= int('1599147740'); 

也得到

我在做什麼錯?

回答

3

首先,您是否在'c'列創建了一個索引?其次,您需要使用'cassandra_IndexOperator :: EQ'以及類似的表達式操作符而不是字符串。

+0

是「c」列有一個索引。我試過了。現在查詢的工作時間比我的send_time_out(60 000 ms)/ recv_time_out(60 000 ms)時間長得多,並且所有的原因都會導致異常「在localhost:9160上執行get_indexed_slices時出錯:異常'cassandra_TimedOutException'並且在查詢結束時'未捕獲異常'MaxRetriesException',並顯示消息'試圖執行get_indexed_slices失敗6次。最後一個錯誤是cassandra_TimedOutException:'爲什麼會這樣呢? – Undrooleek

+0

CF擁有將近3百萬行,每列有4列 – Undrooleek

+0

'c'的值始終爲1,表示所有300萬行匹配? –