Vir*_*shi 4 python django cassandra cqlengine
我正在学习cassandra,Python特别是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上寻求帮助。
谢谢。
您可以使用所谓的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 索引的非常详细的博客文章。
| 归档时间: |
|
| 查看次数: |
935 次 |
| 最近记录: |