Проще говоря, "да" есть способ сделать запрос с помощью LIKE
для компонента, не являющегося первичным ключом.Это можно сделать с помощью индекса SASI (вторичный индекс хранилища).Вот краткий пример:
CREATE TABLE testLike (key TEXT PRIMARY KEY, value TEXT) ;
CREATE CUSTOM INDEX valueIdx ON testLike (value)
USING 'org.apache.cassandra.index.sasi.SASIIndex'
WITH OPTIONS={'mode':'CONTAINS'};
Поскольку ваш запрос требует совпадения строки в столбце, а не просто префикса или суффикса, который вы хотите передать CONTAINS
опция создания индекса.
После записи некоторых данных ваш запрос работает для меня:
> SELECT * FROM testlike WHERE value LIKE '%SpO%';
key | value
-----+--------------
C | CSpOblahblah
D | DSpOblahblah
(2 rows)
ПРЕДУПРЕЖДЕНИЕ !!!
Этот запроскрайне неэффективно, и, вероятно, истечет время ожидания в большом кластере, если только вы не фильтруете по ключу раздела в предложении WHERE
.Важно понимать, что хотя эта функция работает и аналогична работе реляционной базы данных, Кассандра определенно не реляционная база данных.Он просто не предназначен для обработки запросов, которые требуют большого количества сетевого времени для опроса нескольких узлов на предмет данных.