Как создать подобный запрос в Cassandra?

#nosql #cassandra

#nosql #cassandra

Вопрос:

В моем пространстве ключей

 posts = [
    #key
    'post1': {
        # columns and value
        'url': 'foobar.com/post1',
        'body': 'Currently has client support FOOBAR for the following programming languages..',
    },
    'post2': {
        'url': 'foobar.com/post2',
        'body': 'The table with the following table FOOBAR structure...',
    },
   #  ... ,
}
  

Как создать подобный запрос в Cassandra, чтобы получать все записи, содержащие слово ‘FOOBAR’?
В SQL есть SELECT * FROM POST WHERE BODY LIKE '%FOOBAR%' , но в Cassandra?

Комментарии:

1. ПОДОБНЫЙ запрос в Cassandra пока не поддерживается.

Ответ №1:

Единственный способ сделать это эффективно — использовать полнотекстовую поисковую систему типа https://github.com/tjake/Solandra (Solr-on-cassandra). Конечно, вы можете создать свой собственный, используя те же методы вручную, но обычно это не требуется.

Обратите внимание, что это верно и для баз данных SQL: они переведут %FOO% в сканирование таблицы, если вы не используете расширение FTS, подобное tsearch2 в postgresql.

Комментарии:

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

Ответ №2:

Вы могли бы создать другое семейство столбцов, где ключами являются домены, а значениями — ключи в вашем исходном семействе столбцов. Таким образом, вы могли бы напрямую ссылаться на записи в определенном домене.

Комментарии:

1. Ну, для меня создать другое семейство столбцов — это очень сложно. Я думаю, что cassandra необходимо улучшить эту проблему. В MongoDB это очень просто.

Ответ №3:

В Cassandra 3.4 добавлена поддержка LIKE в CSQL. Итак, наконец-то он доступен изначально.