2016-06-30 6 views
3

Cassandra 3.4 теперь предлагает оператор LIKE с помощью пользовательского индекса.Cassandra 3.4 Оператор Java LIKE

Он отлично работает в моем примере тестирования, используя cqlsh с чем-то вроде SELECT * FROM table WHERE indexed_column LIKE '%VALU%'. Я настроил индекс, и все это прекрасно работает.

Как это сделать в драйвере Java (я использую версию 3.0.2) с динамическими значениями? Мой запрос работает с использованием QueryBuilder и использование PreparedStatements при использовании буквенного значения, как так (примера PS но QueryBuilder работает с буквенными значениями также):

PreparedStatement ps = PreparedStatement("SELECT * FROM table WHERE indexed_column LIKE '%VALU%'"); 

Но не хочу ли я использовать? для привязки значения (например, bind '% VAL%') в QueryBuilder или с помощью PreparedStatements. Например.

PreparedStatement ps = PreparedStatement("SELECT * FROM table WHERE indexed_column LIKE ?"); 
BoundStatement boundStatement = new BoundStatement(ps); 
cassandraSession.execute(boundStatement.bind('%VAL%'); 

Я получаю следующее сообщение об ошибке:

com.datastax.driver.core.exceptions.SyntaxError: line 1:53 mismatched input '?' expecting STRING_LITERAL (...test.table WHERE indexed_column LIKE [?];) 

ответ

4

Это ошибка в 3.4, который был зафиксирован в C * 3.6 с помощью CASSANDRA-11456 в том, что вы не смогли обеспечить привязку маркер для (?) значение для оператора LIKE. Если вы перейдете на Cassandra 3.6, это должно сработать.

+0

Право на деньги - спасибо. – JAC2703

Смежные вопросы