Есть ли способ использовать LIKE в NoSQL Command для неосновного ключа? - PullRequest
1 голос
/ 04 июня 2019

Я выбираю из базы данных Cassandra, используя оператор LIKE для не первичного ключа.

select * from "TABLE_NAME" where "Column_name" LIKE '%SpO%' ALLOW FILTERING;

Error from server: code=2200 [Invalid query] message="LIKE restriction is only
supported on properly indexed columns. parameter LIKE '%SpO%' is not valid."

1 Ответ

0 голосов
/ 04 июня 2019

Проще говоря, "да" есть способ сделать запрос с помощью 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.Важно понимать, что хотя эта функция работает и аналогична работе реляционной базы данных, Кассандра определенно не реляционная база данных.Он просто не предназначен для обработки запросов, которые требуют большого количества сетевого времени для опроса нескольких узлов на предмет данных.

...