在DataStax Enterprise中将PreparedStatement与solr_query一起使用

时间:2014-11-24 12:50:22

标签: solr datastax-enterprise datastax datastax-java-driver

我正在尝试使用PreparedStatement solr_query使用以下代码:

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。我正在使用DataStax Java驱动程序。

1 个答案:

答案 0 :(得分:5)

很抱歉,但CQL不支持字符串常量中的变量替换,仅支持完整的字符串常量。无论如何,在每个SELECT语句执行时再次解析Solr查询字符串,因此使用Solr查询字符串"准备好"不会节省开销,所以你应该简单地将整个Solr查询字符串作为预备语句变量提供,如" WHERE solr_query =?"。