Cassandra: как проверить, присутствует ли уже значение столбца

Я использую Кассандру. Существует столбец name-text, в котором хранятся все имена пользователей.

name
------
bob
Bob
bobby
mike
michael
micky
BOB

у меня 2 вопроса

  1. Мне нужно выбрать все имена пользователей, начинающиеся с «бо». Я знаю, что в Кассандре нет подобного аналога. Но можно ли как-то добиться этого? (Дополнительный столбец — это вариант, но есть ли что-то еще?)
  2. Есть 3 записи. Боб, Боб и БОБ. Можно ли использовать выборку всех 3 строк, если я передам, где name='bob'. Мне нужно получить имена без учета регистра.

Заранее спасибо.


person Poppy    schedule 21.03.2014    source источник
comment
Но можно ли этого добиться: их несколько, разной степени сложности.   -  person Raedwald    schedule 21.03.2014


Ответы (1)


Начнем сначала со второго вопроса. Если вы хотите поддерживать запросы без учета регистра, вам следует сохранить вторую копию текстовых данных, которые вы хотите найти в верхнем регистре, в другом столбце. Затем, выполняя запросы по этому столбцу, вы сможете выполнять запросы без учета регистра.

Возвращаясь к поиску bo*. Лучший способ сделать это — использовать схему, которая позволяет использовать столбцы кластеризации (столбцы 2 и выше первичного ключа) для поиска по диапазонам. Вот пример:

CREATE TABLE t1 (region INT, name TEXT, PRIMARY KEY (region, name)); 

В частности, если вы сделаете name вторым столбцом ключа, вы сможете выполнять такие поиски, как

SELECT * FROM t1 WHERE name >= 'bo' and name < 'bp' ALLOW FILTERING;

который вернет результаты, которые вы ищете. Это работает только для завершающих подстановочных знаков: начальные символы должны быть постоянными, чтобы запросы диапазона работали. Опять же, если вы хотите выполнять поиск без учета регистра, сделайте столбец без учета регистра второй частью первичного ключа и выполните запрос по нему:

SELECT * FROM t1 WHERE name_upper >= 'BO' and name_upper < 'BP' ALLOW FILTERING;
person Daniel S.    schedule 21.03.2014
comment
А «РАЗРЕШИТЬ ФИЛЬТРАЦИЯ» обычно означает «Моя схема неверна» :) - person Mikhail Stepura; 22.03.2014
comment
Справедливо; Не могли бы вы предложить лучшую схему для этого варианта использования? - person Daniel S.; 22.03.2014
comment
Вы можете сделать ключ секции первой буквой целевого столбца, но тогда это может быть несколько неудобно, если вы попробуете диапазонный запрос, охватывающий буквы. С другой стороны, это все равно не было частью вопроса, так что, вероятно, это было бы приемлемо. - person Daniel S.; 22.03.2014
comment
Кстати, я не думаю, что «чистая» Cassandra вообще хорошо подходит для этого варианта использования, но Solr + Cassandra должны работать - person Mikhail Stepura; 22.03.2014