4

我正在学习cassandraPython特别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 文档中寻找它,但找不到任何有用的东西。所以我在stackoverflow上寻求帮助。

谢谢。

4

1 回答 1

5

您可以使用所谓的SASI-index(SSTable 附加二级索引)在 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 索引的非常详细的博客文章。

于 2018-05-20T08:49:47.143 回答