如何在不区分大小写的cassandra中搜索?

Vir*_*shi 4 python django cassandra cqlengine

我正在学习cassandraPython特别是Django 2使用cqlengine. 我正在尝试在数据库中搜索以搜索参数开头的字符串,但我想让它不区分大小写。所以如果我有以下数据

-------------------------------
|    PKID    |     String     |
-------------------------------
|    1234    |     FOObar     |
|    4321    |     FoOBar     |
|    5665    |     IreALLy    |
|    5995    |     DontknoW   |
|    8765    |     WHatTOdo   |
|    4327    |     foobaR     |
-------------------------------
Run Code Online (Sandbox Code Playgroud)

所以如果我想搜索以 开头的字符串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()
Run Code Online (Sandbox Code Playgroud)

我在 cqlengine 文档中寻找它,但找不到任何有用的东西。所以我在stackoverflow上寻求帮助。

谢谢。

Ale*_*Ott 5

您可以使用所谓的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'
};
Run Code Online (Sandbox Code Playgroud)

尽管我不确定,cqlengine 是否会立即使用此功能。

这是关于 SASI 索引的非常详细的博客文章