2010-06-30 2 views
6

Допустим, у меня есть столбец семьи, названные вопросы, как показано ниже: Вопросы = {
Кто ты: { имя: «user1» }, Каков ответ: { имя пользователя: " user1 " } ... }Cassandra полнотекстового поиска как

Как найти все вопросы, которые содержат определенные слова? Получите все вопросы, содержащие слово «что». Как это сделать, используя python или, по крайней мере, Java?

ответ

3

Я новичок в Cassandra, но запросы в нем относительно ограничены по сравнению, например, с реляционной базой данных. (Это по дизайну.) Я почти уверен, что в настоящее время нет поддержки полнотекстового поиска (это может даже не быть в дорожной карте).

Возможно, вам лучше всего пойти с Lucene или что-то подобное, чтобы проиндексировать текст вопросов, будь то в хранилище данных Cassandra или в отдельном хранилище данных.

Там, как представляется, по крайней мере, один проект, который пытается интегрировать Lucene с Кассандрой, и там могут быть другие:

Другой способ пойти в вашем случае может состоять в том, чтобы разбить вопросы на слова и сохранить свой собственный индекс слов к вопросам; ваш пробег может меняться здесь, и что-то вроде Lucene, несомненно, даст вам большую гибкость в опросе.

4

Solandra (https://github.com/tjake/Solandra) - новое название для Lucandra.

Solandra - это комбинация Cassandra и Solr (основанная на полнотекстовой поисковой системе Lucene).

Только Кассандра не занимается поиском текста, хотя вы можете реализовать некоторую базовую индексацию текста, создав вторичные семейства столбцов индексов (Google: дополнительный индекс cassandra).

2

Похоже, вы могли бы добавить «DSE Search», от людей, которые поддерживают Кассандру, и у вас будет то, что вам нужно. Lucene/Solr, но все данные, хранящиеся в Cassandra.

http://www.datastax.com/dev/blog/cassandra-with-solr-integration-details

У вас есть хорошее решение, данное последним джентльменом, но это решение может служить вашей цели лучше с точки зрения удобства использования.

Отказ от ответственности: Я работаю для поставщика NoSQL, но не на Кассандре.