首页 > 解决方案 > 如何在具有 SAI 索引的 TEXT 列上使用 CONTAINS?

问题描述

根据这篇文章:https : //docs.datastax.com/en/storage-attached-index/6.8/sai/saiFaqs.html , TEXT 类型支持 CONTAINS 操作。但我收到这样的错误:com.datastax.driver.core.exceptions.InvalidQueryException: Cannot use CONTAINS on non-collection column

谁能解释如何在 TEXT 列上使用 SAI 索引以有可能使用 CONTAINS 操作(如 SQL LIKE 操作)在此列中进行搜索?

PS 如果在具有 TEXT 值列表的列上创建 SAI 索引,我可以使用 CONTAINS 操作。但是不想自己生成所有子字符串的组合。至少根据文档,应该可以在 TEXT 上使用 CONTAINS ...

数据库架构:

CREATE TABLE IF NOT EXISTS some_table (
 id text,
 data text,
 list_for_search list<text>,
 PRIMARY KEY (id))
WITH CLUSTERING ORDER BY (id ASC);

CREATE CUSTOM INDEX IF NOT EXISTS some_table_search_idx
 ON some_table (data)
 USING 'StorageAttachedIndex' WITH OPTIONS = {'case_sensitive': 'false'};

DSE 6.8.3

标签: cassandradatastaxdatastax-enterprisecassandra-sai

解决方案


CONTAINS和它的变体,CONTAINS KEY旨在CONTAINS VALUES搜索文本类型(映射、集合和列表)集合中的特定字符串值 - 不支持在文本中搜索子字符串(这LIKE是不支持的任务(然而?))。

根据文档

不支持:LIKE, IN,OR


推荐阅读