solr
  • datastax-enterprise
  • datastax
  • datastax-java-driver
  • 2014-11-24 3 views 2 likes 
    2

    Я пытаюсь использовать PreparedStatement с solr_query, используя следующий код:Использование PreparedStatement с solr_query в DataStax Enterprise

    PreparedStatement preparedStatement = cassandraSession.prepare(
        "SELECT * FROM users WHERE solr_query = 'username:? OR email:?';" 
    ); 
    
    BoundStatement boundStatement = new BoundStatement(preparedStatement); 
    
    ResultSet results = cassandraSession.execute(
        boundStatement.bind(
         username, 
         email 
        ) 
    ); 
    

    Когда я выполняю код выше, я получаю следующее исключение: java.lang.IllegalArgumentException: Prepared statement has only 0 variables, 2 values provided

    Как я могу правильно использовать подготовленные инструкции с solr_query?

    Я использую DataStax Enterprise 4.5.3, который использует Cassandra 2.0.11.82 и Solr 4.6.0.2.8. Я использую драйвер Java DataStax.

    ответ

    5

    Извините, но CQL не поддерживает подстановку переменных внутри строковых констант, только для полной строковой константы. Строка запроса Solr снова обрабатывается при каждом выполнении инструкции SELECT, поэтому, если строка запроса Solr «подготовлена» не сохранит никаких накладных расходов, поэтому вы должны просто предоставить всю строку запроса Solr как подготовленную переменную оператора, как в «WHERE solr_query = ?».

    +1

    Благодарим вас за разъяснение. Идея с предоставлением целой строки solr в подготовленное заявление звучит отлично для меня. Еще раз спасибо за ваше время. – kazy

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