【问题标题】:Using PreparedStatement with solr_query in DataStax Enterprise在 DataStax Enterprise 中使用 PreparedStatement 和 solr_query
【发布时间】:2015-01-22 04:36:22
【问题描述】:

我正在尝试使用以下代码将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
    )
);

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 感谢您的解释。在准备好的语句中提供整个 solr 字符串的想法对我来说听起来很棒。再次感谢您的宝贵时间。
    猜你喜欢
    • 2015-03-14
    • 2015-08-25
    • 1970-01-01
    • 2015-01-09
    • 2017-06-03
    • 1970-01-01
    • 2014-04-19
    • 2015-03-15
    • 1970-01-01
    相关资源
    最近更新 更多