如何使用 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”

Cassandra 与 Stratio lucene 索引

Stratio cassandra-lucene-index 插件 + BoundStatements

选择带有stratio lucene索引的cassandra的排序查询,版本> 2.2

Stratio Lucene Index 3.0.9:INet 映射器的用途

saveToCassandra 与 Cassandra Lucene 插件一起使用吗?