我正在使用cassandra
学习Python
,并使用Django 2
专门与cqlengine
学习。我试图在数据库中搜索,我搜索以搜索参数开头的字符串,但我想让它不区分大小写。如果我有以下数据
-------------------------------
| PKID | String |
-------------------------------
| 1234 | FOObar |
| 4321 | FoOBar |
| 5665 | IreALLy |
| 5995 | DontknoW |
| 8765 | WHatTOdo |
| 4327 | foobaR |
-------------------------------
因此,如果我想搜索以foo
开头的字符串,我应该获得所有三条记录。我搜索了解决方案,我发现有一条关于stackoverflow的注释,cassandra中的所有内容都是字节的,所以这是不可能的,但我也发现了一些东西,说我需要编写自定义函数来实现它。
对于Django,我使用django-cassandra-engine来创建模型。它是django的cqlengine的一个实现。所以当我创建我的模型时,我需要在其中添加任何内容吗?我的测试模型是
class TestModel(DjangoCassandraModel):
key_id = columns.UUID(primary_key=True, default=uuid.uuid4)
string = columns.Text()
我在cqlengine docs中找了它,但找不到任何有用的东西。所以我在stackoverflow上寻求帮助。
感谢。
答案 0 :(得分:4)
您可以使用所谓的SASI-index (SSTable Attached Secondary Index)在Cassandra本身中执行此操作(尽管它被标记为实验性功能)。您可以定义用于执行前缀,范围或子字符串搜索的索引,并且在配置索引时,您可以指定您需要不区分大小写的字符串:
CREATE CUSTOM INDEX index_name ON table (field)
USING 'org.apache.cassandra.index.sasi.SASIIndex'
WITH OPTIONS = {
'mode': 'PREFIX', // if you want to search only for 'starting with'
'case_sensitive': 'false'
};
虽然我不确定,但cqlengine是否可以开箱即用。
以下是关于SASI索引的very detailed blog post。