Кассандра создает и использует индекс [pycassa]

Я хотел бы создать и использовать индекс по ключу «возраст» стандартного семейства столбцов.

Я сделал следующее, используя pycassa:

In [10]: sys.create_index('test01', 'word_map', 'age', 'IntegerType', index_type=0, index_name='index_age')
In [11]: age_expr = create_index_expression('age', 6, GT)
In [12]: clause = create_index_clause([age_expr], count=20)
In [13]: cf.get_indexed_slices(clause)

error: 'No indexed columns present in index clause with operator EQ'

Согласно этой прекрасной странице, мне нужно установить тип значения. Однако:

In [16]:  cf_words.column_validators
Out[16]: {'black_white': 'BooleanType', 'url': 'UTF8Type', 'age': 'IntegerType', 'site': 'UTF8Type', 'len': 'IntegerType', 'content': 'UTF8Type', 'colourful': 'BooleanType', 'printer_friendly': 'BooleanType'}

поэтому у возраста есть набор типов данных.

Есть идеи?


person rich tier    schedule 19.04.2012    source источник


Ответы (1)


Вместо строки «GT» используйте pycassa.index.GT. Это перечисление, которое Thrift реализует с целыми числами.

Вы можете найти всю документацию и пример использования здесь: http://pycassa.github.com/pycassa/api/pycassa/index.html

person Tyler Hobbs    schedule 20.04.2012
comment
Если я использовал pycassa.index.GT, он говорит NameError: глобальное имя «pycassa» не определено. Изменение кода на «GT» на GT дает мне другую ошибку: нет индексированных столбцов в предложении индекса с оператором EQ - person rich tier; 20.04.2012
comment
@rikAtee Вам нужно сделать что-то вроде «из pycassa.index import GT», а затем вы можете просто использовать GT напрямую. Отсутствие индексированных столбцов в предложении index связано с тем, что в вашем предложении должно быть хотя бы одно выражение EQ, которое имеет дело с индексированным столбцом для запросов вторичного индекса с помощью Cassandra. - person Tyler Hobbs; 20.04.2012
comment
Я сделал: sys.alter_column('test01','word_map','age','IntegerType') и: sys.create_index('test01','word_map','age','IntegerType') и все еще получаю InvalidRequestException (почему='Нет индексированных столбцов в предложении индекса с оператором EQ') - person rich tier; 21.04.2012
comment
@rikAtee у вас должно быть выражение EQ хотя бы для одного индексированного столбца. Сейчас вы используете только выражение GT; хотя этот столбец проиндексирован, этого недостаточно. - person Tyler Hobbs; 21.04.2012