spring-data-cassandra:InvalidQueryException:无法执行此查询...使用ALLOW FILTERING

时间:2017-10-04 15:23:00

标签: spring cassandra spring-data spring-data-jpa spring-data-cassandra

我有以下代码

myLabel.Text = ConfigurationManager.AppSettings["Description"];

执行此操作时,我会获得 @Indexed @PrimaryKeyColumn(name = "x", ordinal = 1, type = PrimaryKeyType.PARTITIONED) @Column(value="x") private String x; @Indexed @PrimaryKeyColumn(name = "code", ordinal = 2, type = PrimaryKeyType.PARTITIONED) @Column(value="code") private String code; @Query(value = "select * from customers where code = ?0") Optional<Customer> findByCode(String code);

有没有办法从Caused by: com.datastax.driver.core.exceptions.InvalidQueryException: Cannot execute this query as it might involve data filtering and thus may have unpredictable performance. If you want to execute this query despite the performance unpredictability, use ALLOW FILTERING避免这种情况?我不想在查询中添加spring-data-cassandra。我尝试在ALLOW FILTERING列上创建单独的索引,但这还没有解决问题。我认为它在spring数据配置中停止了。如果我在code中执行相同的查询,则可以正常运行。

2 个答案:

答案 0 :(得分:3)

您必须在查询中指定分区键,除非您创建索引或使用ALLOW FILTERING

使用allow过滤执行查询可能不是一个好主意,因为它可能会占用大量的计算资源,并且由于超时而不会返回任何结果。不要在生产中使用allow过滤阅读有关使用ALLOW FILTERING

的datastax文档

https://docs.datastax.com/en/cql/3.3/cql/cql_reference/select_r.html?hl=allow,filter

答案 1 :(得分:0)

使用no-sql数据库时,需要正确设计数据以避免过滤。您可以添加二级索引以优化特定字段的检索。此处有更多详细信息:https://docs.datastax.com/en/archived/cql/3.3/cql/cql_using/useSecondaryIndex.html

如果您确定查询是您所需要的,则可以使用allowFiltering批注中的@Query参数来明确指示要使用ALLOW FILTERING

@Query(value = "select * from customers where code = ?0", allowFiltering = true)
Optional<Customer> findOneByCode(String code);