【问题标题】:Usage of Cassandra 'com.datastax.bdp.search.solr.Cql3SolrSecondaryIndex' in CQL queries在 CQL 查询中使用 Cassandra 'com.datastax.bdp.search.solr.Cql3SolrSecondaryIndex'
【发布时间】:2014-11-15 22:28:28
【问题描述】:

com.datastax.bdp.search.solr.Cql3SolrSecondaryIndex 是 Datastax 引入的用于 Solr 集成的自定义 Cassandra 索引类型。我的主要问题是:CQL 查询不能使用这些自定义索引吗?我在索引列上尝试了一些使用过滤器的 CQL 查询,但它们总是以 RPC 超时结束。

我的用例:

我有一个表,其中查询通常涉及多列上的过滤器。由于 Cassandra 的原生二级索引一次只能在一列中定义(即一个索引 = 一列),并且任何给定的 CQL 查询只能使用一个索引,我认为我无法使用 CQL 满足应用程序的读取要求.这就是我使用 Solr 进行所有读取操作的原因——因为 Solr 可以一次过滤多个列。这适用于大多数情况;但是我有两个查询结果对 Solr 来说太重了。现在,我想尝试 Spark,因为我已经了解了它惊人的分析功能。然而,我偶然发现了一个障碍:Spark 依靠 CQL“WHERE”来过滤掉将从 Cassandra 加载到 Spark 的数据。而且由于 CQL 查询似乎无法使用 Cql3SolrSecondaryIndex 进行读取,我不知道如何将数据加载到 Spark 中。我知道在将数据从 Cassandra 加载到 Spark 时,Cassandra 服务器端的过滤不是强制性的;但就我而言,这是必需,因为表太大(大约 40 亿条记录分布在 RF=2 的 6 个节点上)。我试图在我打算过滤的列之一中定义原生 Cassandra 索引,但 Cassandra 抛出错误,指出该列已存在索引(即 Cql3SolrSecondaryIndex 索引)。

现在在我看来:DSE 迫使我在 Solr 和 Spark 之间进行选择 - 如果我在 Solr 核心中包含一个列,则将在该列中定义 Cql3SolrSecondaryIndex 索引,并且我无法再在其中定义本机 Cassandra 索引.如果没有本机 Cassandra 索引,CQL 查询将无法在该列上进行过滤。如果没有服务器端 CQL 过滤,Spark 将无法加载所有 40 亿行,并可能触发 OOM。

我的印象正确吗?有解决办法吗?

【问题讨论】:

    标签: cassandra apache-spark cql3 datastax-enterprise datastax


    【解决方案1】:

    您可以通过使用 CQL solr 查询在 CQL 中使用 solr 索引。不建议将其用于生产用途(坚持使用 HTTP API),但在您的情况下,这可能是最好的选择。

    语法如下:

    SELECT ...

    FROM ...

    where solr_query = 'search expression'

    [LIMIT ....]

    您的搜索表达式应符合 Lucene 语法。

    这里是 Datastax 文档的链接: http://www.datastax.com/documentation/datastax_enterprise/4.5/datastax_enterprise/srch/srchCql.html

    【讨论】:

    • 好吧,我想这是我的唯一方法。不幸的是,即使使用这种查询方法,我仍然会收到 RPC 超时。
    猜你喜欢
    • 2019-05-18
    • 2015-03-10
    • 1970-01-01
    • 1970-01-01
    • 2019-05-04
    • 1970-01-01
    • 1970-01-01
    • 2013-08-14
    • 2013-10-14
    相关资源
    最近更新 更多