如何使用 Stratio Cassandra Lucene Index 进行小写前缀过滤
Posted
技术标签:
【中文标题】如何使用 Stratio Cassandra Lucene Index 进行小写前缀过滤【英文标题】:How do you do lowercase prefix filtering with Stratio Cassandra Lucene Index 【发布时间】:2016-04-06 04:20:46 【问题描述】:是否可以使用 Stratio Cassandra Lucene 索引进行小写前缀过滤/查询?我无法找到有关此特定用例的文档。
【问题讨论】:
【参考方案1】:查询的大小写取决于Lucene text analyzer在索引过程中的使用情况,不能在查询时间决定。如果要进行不区分大小写的前缀搜索,则应使用带有分析器的映射器来生成小写术语。这些术语将在搜索时被索引和匹配。例如:
CREATE KEYSPACE test
WITH REPLICATION = 'class' : 'SimpleStrategy', 'replication_factor': 1;
USE test;
CREATE TABLE test (
id INT PRIMARY KEY,
body TEXT
);
CREATE CUSTOM INDEX test_index ON test ()
USING 'com.stratio.cassandra.lucene.Index'
WITH OPTIONS =
'refresh_seconds' : '1',
'schema' : '
fields :
body1 : type :"string", column:"body", case_sensitive:false,
body2 : type :"string", column:"body", case_sensitive:true
'
;
INSERT INTO test(id,body) VALUES ( 1, 'foo');
INSERT INTO test(id,body) VALUES ( 2, 'Foo');
INSERT INTO test(id,body) VALUES ( 3, 'bar');
INSERT INTO test(id,body) VALUES ( 4, 'Bar');
SELECT * FROM test WHERE expr(test_index,
'filter:type:"prefix", field:"body2", value:"f"'); -- Returns foo
SELECT * FROM test WHERE expr(test_index,
'filter:type:"prefix", field:"body2", value:"F"'); -- Returns Foo
SELECT * FROM test WHERE expr(test_index,
'filter:type:"prefix", field:"body1", value:"f"'); -- Returns foo and Foo
SELECT * FROM test WHERE expr(test_index,
'filter:type:"prefix", field:"body1", value:"F"'); -- Returns no results
【讨论】:
非常感谢!正是我想要的。 我对此有疑问,我想知道“case_sensitive:false”是否仅适用于 type=string 而不适用于 type=text...?以上是关于如何使用 Stratio Cassandra Lucene Index 进行小写前缀过滤的主要内容,如果未能解决你的问题,请参考以下文章
找不到自定义索引器类“com.stratio.cassandra.lucene.Index”
Stratio cassandra-lucene-index 插件 + BoundStatements
选择带有stratio lucene索引的cassandra的排序查询,版本> 2.2