我正在使用cassandra 2.1.10。 所以首先我要清楚我知道二级索引在cassandra中是反模式的。但是出于测试目的,我试图遵循:
CREATE TABLE test_topology1.tt (
a text PRIMARY KEY,
b timestamp
) WITH bloom_filter_fp_chance = 0.01
AND caching = '{"keys":"ALL", "rows_per_partition":"NONE"}'
AND comment = ''
AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy'}
AND compression = {'sstable_compression': 'org.apache.cassandra.io.compress.LZ4Compressor'}
AND dclocal_read_repair_chance = 0.1
AND default_time_to_live = 0
AND gc_grace_seconds = 864000
AND max_index_interval = 2048
AND memtable_flush_period_in_ms = 0
AND min_index_interval = 128
AND read_repair_chance = 0.0
AND speculative_retry = '99.0PERCENTILE';
CREATE INDEX idx_tt ON test_topology1.tt (b);
当我运行以下查询时,它会给我错误。
cqlsh:test_topology1> Select * from tt where b>='2016-04-29 18:00:00' ALLOW FILTERING;
InvalidRequest: code=2200 [Invalid query] message="No secondary indexes on the restricted columns support the provided operators: 'b >= <value>'"
虽然此Blog表示允许过滤可用于查询二级索引。 Cassandra安装在Windows机器上。
答案 0 :(得分:3)
Cassandra中不允许对二级索引列进行范围查询,包括2.2.x.但是,正如帖子 A deep look at the CQL WHERE clause 指出的那样,如果过滤是全新的,则允许在非索引列上使用它们:
对二级索引的直接查询仅支持=,CONTAINS或 包含关键限制。
[..]
辅助索引查询允许您限制返回的结果 使用=,&gt;,&gt; =,&lt; =和&lt;,CONTAINS和CONTAINS KEY限制 在使用过滤的非索引列上。
所以,给定表结构和索引
CREATE TABLE test_secondary_index (
a text PRIMARY KEY,
b timestamp,
c timestamp
);
CREATE INDEX idx_inequality_test ON test_secondary_index (b);
以下查询失败,因为不完整性测试是在索引列上完成的:
SELECT * FROM test_secondary_index WHERE b >= '2016-04-29 18:00:00' ALLOW FILTERING ;
InvalidRequest: code=2200 [Invalid query] message="No secondary indexes on the restricted columns support the provided operators: 'b >= <value>'"
但以下情况有效,因为不等式测试是在非索引列上完成的:
SELECT * FROM test_secondary_index WHERE b = '2016-04-29 18:00:00' AND c >= '2016-04-29 18:00:00' ALLOW FILTERING ;
a | b | c
---+---+---
(0 rows)
如果您在列c
上添加其他索引,但仍然需要ALLOW FILTERING
字词,这仍然有效,这对我来说意味着在此方案中未使用列c上的索引。
答案 1 :(得分:2)
范围查询 DOES 使用允许过滤
处理二级索引<?php
$category_id = get_cat_ID($strReports || $strInsights);
$custom_query = new WP_Query( 'cat=' .$category_id. '&featured=no&posts_per_page=6&order=desc' );
while($custom_query->have_posts()) : $custom_query->the_post();
?>
HTML Content Here
<?php endwhile; ?>
<?php wp_reset_query(); // reset the query ?>
答案 2 :(得分:0)
这将为您提供所需的结果。使用b作为聚类列。
CREATE TABLE test_topology1.tt( 一个文字, b时间戳, 主键(a,b) )
从tt中选择*其中b&gt; =&#39; 2016-04-29 18:00:00&#39;允许过滤;