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

kaz*_*azy 2 solr datastax-enterprise datastax-java-driver datastax

我试图用PreparedStatementsolr_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
    )
);
Run Code Online (Sandbox Code Playgroud)

当我执行上面的代码时,我得到以下异常: 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驱动程序.

Jac*_*sky 5

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