cassandra(datastax)cql忽略文本列的大小写

q43xntqr  于 2021-06-13  发布在  Cassandra
关注(0)|答案(1)|浏览(408)

我已经使用下面的cql创建了一个表:我想运行查询来按演员名称查找所有视频(不区分大小写)。

CREATE TABLE video_by_actor(
    actor text, added_date timestamp, video_id timeuuid, 
    character_name text, description text,
    encoding frozen<video_encoding>,
    tags set<text>, title text, user_id uuid,
primary key ((actor), added_date)) with clustering order by (added_date desc);

select * from video_by_actor where actor='Tom Hanks'

我想从表中选择所有行,而不考虑演员的姓名大小写,例如“tom hanks”、“tom hanks”、“tom hanks”等。
有可能吗?

yv5phkfx

yv5phkfx1#

我要搜查所有的案子
首先,如果你想“搜索”,你需要一个不同的工具,比如elasticsearch。cassandra用于基于密钥的查询,这与搜索非常不同。
不,Cassandra不可能让你这么做,因为他关心的是这个案子。我创建了上面描述的表定义,并在tomhanks的名字中插入了四行,每行都有一个不同的case应用程序。然后我用 token 功能:

aploetz@cqlsh:stackoverflow> SELECT actor,token(actor),title FROM video_by_actor ;

 actor     | system.token(actor)  | title
-----------+----------------------+---------------------
 Tom Hanks | -4258050846863339499 |        Forrest Gump
 Tom hanks | -3872727890651172910 | Saving Private Ryan
 tom Hanks | -3300209463718095087 | Joe vs. the Volcano
 tom hanks |  1022609553103151654 |           Apollo 13

(4 rows)

注意“tom hanks”的每一个不同的例子是如何产生一个不同的标记的。因为这个表正在分区 actor ,这意味着这些行可能存储在不同的节点上。
再说一次,你可能想用一个真正的搜索引擎来搜索这样的东西。他们将拥有诸如分析器之类的工具,可以启用“模糊匹配”之类的功能。

相关问题