我试图使用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查询?
答案 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)
几个基本要点:
回答你的第一个问题: “来自服务器的错误:代码= 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的);