Datastax - Cassandra CQL Solr 查询分页问题

Datastax - Cassandra CQL Solr query pagination issue

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

我使用的是cqlsh 5.0.1 |卡桑德拉 3.0.10.1443 | DSE 5.0.4 | CQL 规范 3.4.0

1) select country_id,country_name 从 rptavlview.country 其中 solr_query='{"q":" :","start":"1"}' 限制 5;

当我尝试上述查询时,出现如下错误

InvalidRequest:来自服务器的错误:code=2200 [无效查询] message="You have driver paging active which also activates Solr deep pagination. The 'start' parameter is not allowed. Please either deactivate paging or read about Solr deep paging restrictions and fix accordingly."

2) select country_id,country_name 从 rptavlview.country 其中 solr_query='{"q":" :","start":"1","rows":"5"}';

InvalidRequest:来自服务器的错误:code=2200 [无效查询] message="Unsupported query parameter: rows"

当我从 solr 尝试时它成功了

http://MYIPADDRESS:8983/solr/rptavlview.country/select?q=%3A&start=1&rows=5&wt=json&indent=true

"response": { "numFound": 237, "start": 1, "docs": [ { "_uniqueKey": "[\"49\",\"Christmas Island\"]",
"country_name": "Christmas Island",
"country_name_ar": "ͬيرة كريسماس ",
"country_id": "49" }, { "_uniqueKey": "[\"51\",\"Colombia\"]",
"country_name": "Colombia",
"country_name_ar": "كولمبيا",
"country_id": "51" }, { "_uniqueKey": "[\"56\",\"Cuba\"]",
"country_name": "Cuba",
"country_name_ar": "كوبا",
"country_id": "56" }, { "_uniqueKey": "[\"57\",\"Cyprus\"]",
"country_name": "Cyprus",
"country_name_ar": "₩",
"country_id": "57" }, { "_uniqueKey": "[\"59\",\"Democratic Republic of the Congo\"]",
"country_name": "Democratic Republic of the Congo",
"country_name_ar": "ͬمهورية الكونغو الديموراطية",
"country_id": "59" } ] } }

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

Solr 支持 two different ways of doing pagination - 一个是旧的 start 参数,它告诉 Solr 从哪个元素开始结果集,新的是 cursorMark - 它告诉 Solr 最后一个结果集在哪里结束并开始呈现从标记开始的结果。

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

我已经描述了使用分页状态/光标标记和 "old style" 之间的区别,这应该说明为什么在分布式上下文中使用状态/标记更好。

几个基本点:

  1. CQL Solr 查询默认为等效的 LIMIT 10。
  2. 默认情况下不启用分页。
  3. SELECT select 表达式来自 table [哪里 solr_query = 'search expression'] [限制 n]

回答你的第一个问题: "Error from server: code=2200 [Invalid query] message="您激活了驱动程序分页,这也激活了 Solr 深度分页。不允许使用 'start' 参数。请停用分页或阅读有关 Solr 深度分页限制的信息并进行相应修复

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

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

"When 'driver', DSE Search will use pagination (aka cursors) when it detects the driver is using pagination" "When 'off' it will ignore the driver's setting and not use pagination. In this case the query parameter 'paging' can override it." 默认为 'off'。因此,在您的情况下,当前值为 'driver'.

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

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

或:

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

用关闭分页属性并重启dse。

"InvalidRequest: Error from server: code=2200 [Invalid query] message="不支持的查询参数:行” ==> 使用 LIMIT 子句指定要 return 的行数。

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

如果您需要更多信息,请告诉我。

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

解决

CQL

cqlsh> 分页关闭;

cqlsh> select country_id,country_name 来自 rptavlview.country 其中 solr_query='{"q":" :","start":1}' 限制 5;

在 Java 中 - 为语句设置 Fetch Size

语句语句=new SimpleStatement(cql_query_string); statement.setFetchSize(Integer.MAX_VALUE);