Datastax - Cassandra CQL Solr查询分页问题

时间:2017-02-08 10:08:13

标签: solr cassandra pagination datastax cql

我试图使用solr查询实现分页,但是从CQL solr无法正常工作。请告诉我,我是Cassandra和solr的新手。

我正在使用cqlsh 5.0.1 | Cassandra 3.0.10.1443 | DSE 5.0.4 | CQL规范3.4.0

1)从rptavlview.country中选择country_id,country_name,其中solr_query ='{“q”:“”,“start”:“1”}'limit 5;

当我尝试使用上述查询时,我收到如下错误

InvalidRequest :来自服务器的错误:code = 2200 [无效查询] message =“您的驱动程序分页处于活动状态,这也会激活Solr深度分页。不允许使用'start'参数。请停用分页或阅读Solr深度分页限制并相应地修复。“

2)从rptavlview.country中选择country_id,country_name,其中solr_query ='{“q”:“”,“start”:“1”,“rows”:“5”}' ;

InvalidRequest :来自服务器的错误:code = 2200 [无效查询] message =“不支持的查询参数:行”

当我尝试从solr工作时

http://MYIPADDRESS:8983/solr/rptavlview.country/select?q= %3A &安培;起始= 1&安培;行数= 5和;重量= JSON&安培;缩进=真

“回复”:{     “numFound”:237,     “开始”:1,     “docs”:[       {         “_uniqueKey”:“[\”49 \“,\”圣诞岛\“]”,
        “country_name”:“圣诞岛”,
        “country_name_ar”:“جزيرةكريسماس”,
        “country_id”:“49”       },       {         “_uniqueKey”:“[\”51 \“,\”哥伦比亚\“]”,
        “country_name”:“哥伦比亚”,
        “country_name_ar”:“كولمبيا”,
        “country_id”:“51”       },       {         “_uniqueKey”:“[\”56 \“,”古巴\“]”,
        “country_name”:“古巴”,
        “country_name_ar”:“كوبا”,
        “country_id”:“56”       },       {         “_uniqueKey”:“[\”57 \“,\”塞浦路斯\“]”,
        “country_name”:“塞浦路斯”,
        “country_name_ar”:“قبرص”,
        “country_id”:“57”       },       {         “_uniqueKey”:“[\”59 \“,”刚果民主共和国“”],“         “country_name”:“刚果民主共和国”,
        “country_name_ar”:“جمهوريةالكونغوالديمقراطية”,

        “country_id”:“59”       }     ]   } }

为什么分页不适用于我的CQL solr查询?

3 个答案:

答案 0 :(得分:3)

Solr支持two different ways of doing pagination - 一个是旧的start参数,告诉Solr在哪个元素处启动结果集,新的是cursorMark - 它告诉Solr最后一个结果集的结束位置和开始展示商标及其后的结果。

后一种方式(也称为"深度分页")是Cassandra支持paging_state元素的方式,所以我的猜测是Solr集成将基于它自己的分页CQL查询中给出的属性,而不是用作Solr查询的JSON(因为它会覆盖查询的属性)。

我已经描述了使用分页状态/光标标记和"旧样式"之间的区别。 pagination in a different answer,它应该说明为什么在分布式上下文中使用状态/标记是优越的。

答案 1 :(得分:1)

几个基本要点:

  1. CQL Solr查询默认为等效的LIMIT 10。
  2. 默认情况下,Pagination未启用。
  3. SELECT select表达式FROM表      [WHERE solr_query ='搜索表达式'] [LIMIT n]
  4. 回答你的第一个问题: “来自服务器的错误:代码= 2200 [无效查询]消息=”您的驱动程序分页处于活动状态,这也会激活Solr深度分页。不允许使用'start'参数。请停用分页或阅读Solr深度分页限制并相应地修复“

    ==>请检查“cql_solr_query_paging”属性。     文件名:DSE_install_location / resources / dse / conf / dse.yaml

       FileName = MessageName(BTS.ReceivedFileName);
    

    “当''''时,DSE搜索将在检测到驱动程序正在使用分页时使用分页(也称为游标)  “当'关闭'时,它将忽略驱动程序的设置而不使用分页。在这种情况下,查询参数'paging'可以覆盖它。” 默认为'关闭'。所以,在你的情况下,当前值是'driver'。

    因此,您应该将查询修改为:

    Valid values are : 'driver' and  'off';
    

    OR:

    select country_id,country_name from rptavlview.country where solr_query='{"q":"*:*"}' limit 5; 
    

    关闭分页属性并重新启动dse。

    “InvalidRequest:来自服务器的错误:code = 2200 [无效查询] message =”不支持的查询参数:行“ ==>使用LIMIT子句指定要返回的行数。

    更多信息(请阅读): https://docs.datastax.com/en/datastax_enterprise/4.8/datastax_enterprise/srch/srchCql.html

    如果您需要更多信息,请与我们联系。

答案 2 :(得分:1)

我发布的问题的答案可以通过

解决

在CQL中

cqlsh>寻呼;

cqlsh>从rptavlview.country中选择country_id,country_name,其中solr_query ='{“q”:“”,“start”:1}'limit 5;

在Java中 - 设置语句的提取大小

Statement statement = new SimpleStatement(cql_query_string); statement.setFetchSize(Integer.MAX_VALUE的);