2017-02-08 125 views
2

我試圖使用solr查詢實現分頁,但無法從CQL solr正常工作。請告訴我,我是Cassandra和solr的新手。Datastax - Cassandra CQL Solr查詢分頁問題

我正在使用cqlsh 5.0.1 | Cassandra 3.0.10.1443 | DSE 5.0.4 | CQL規格3.4.0

1)選擇COUNTRY_ID,從rptavlview.country其中solr_query = COUNTRY_NAME '{ 「Q」: 「」, 「開始」: 「1」}' 極限5;

當我與上述查詢試過,我收到錯誤如下

InvalidRequest:錯誤從服務器:代碼= 2200 [查詢無效]消息=「您有司機尋呼活性,其還激活Solr的深分頁。'start'參數是不允許的。請停用分頁或閱讀Solr深度分頁限制並相應地修復。「

2)從rptavlview中選擇country_id,country_name。solr_query ='{「q」:「」,「start」:「1」,「rows」:「5」}';

InvalidRequest:從服務器錯誤:代碼= 2200 [查詢無效]消息= 「不支持的查詢參數:行」

當我從solr的它的工作

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

「響應」:{ 「numFound」:237, 「start」:1, 「docs」:[ {__uniqueKey「:」[\「49 \」,\「Christmas Island \」]「,
「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

答案我貼出的問題可以通過

解決在CQL

cqlsh>頁面關閉;

cqlsh> select country_id,country_name from rptavlview.country where solr_query ='{「q」:「」,「start」:1}'limit 5;

在Java中 - 設置取大小聲明

聲明語句=新SimpleStatement(cql_query_string); statement.setFetchSize(Integer.MAX_VALUE);

2

Solr支持two different ways of doing pagination - 一個是舊的start參數,它告訴Solr哪個元素啓動結果集,新的是cursorMark - 它告訴Solr最後的結果集在哪裏結束並開始顯示標記的結果並繼續。

後一種方式(也稱爲「深度分頁」)是Cassandra支持其paging_state元素的方式,所以我的猜測是Solr集成將根據CQL查詢中給出的屬性進行自己的分頁,而不是在用作Solr查詢的JSON中(因爲它會覆蓋查詢的屬性)。

我已經描述了使用分頁狀態/光標標記和「舊樣式」pagination in a different answer之間的區別,它應該說明爲什麼在分佈式環境中使用狀態/標記更好。

+0

'select country_id,country_name from rptavlview.country where solr_query ='{「q」:「*:*」,「start」:「1」}'limit 5; '在[cqlsh 5.0.1 |工作正常Cassandra 3.0.9.1346 | DSE 5.0.3 | CQL規範3.4。0 |本機協議v4] – Prajith

+0

任何人都可以提供給我任何示例 – Prajith

+0

我無法使用DSE 5.0.4中的舊啓動和行參數啓動CQL,** select * from rptavlview.country where solr_query ='{「q」: 「*:*」,「start」:「5」,「rows」:「3」}'; **,這裏是它的引發錯誤,** InvalidRequest:** Error from server:code = 2200 [Invalid query] message =「不支持的查詢參數:行」 – Prajith

1

幾個基本點:

  1. CQL Solr的查詢被默認爲一個等效LIMIT 10.
  2. 分頁不是默認。
  3. 選擇選擇表達FROM表 [WHERE solr_query = '搜索表達式'] [LIMIT n]的

爲了回答第一個問題: 「從服務器錯誤:代碼= 2200 [查詢無效]消息=」你有驅動器分頁激活,這也激活了Solr深度分頁。 'start'參數是不允許的。請要麼關閉尋呼或瞭解Solr的深呼叫限制,並相應修正」

==>請檢查 「cql_solr_query_paging」 屬性 文件名:DSE_install_location /資源/ DSE/conf目錄/ dse.yaml

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

「當'driver'時,當DSE Search檢測到驅動程序正在使用分頁」 「時,它將使用分頁(aka光標)。」關閉「時,它將忽略驅動程序的設置並且不使用分頁。在這種情況下,查詢參數「尋呼」可以覆蓋它「 默認情況下,它的‘關閉’那麼,在你的情況下的電流值是‘司機’

所以,你應該修改你的查詢:。

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

OR:

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

隨着關閉分頁屬性,並重新啓動DSE

「InvalidRequest:錯誤從服務器:代碼= 2200 [查詢無效]消息=」 UNS不支持的查詢參數:行「 ==>使用LIMIT子句指定要返回的行數。

的更多信息(請閱讀): https://docs.datastax.com/en/datastax_enterprise/4.8/datastax_enterprise/srch/srchCql.html

讓我知道如果你需要更多的信息。

+0

嗨,我試過你的帖子。首先我改變了** cql_solr_query_paging:driver **,但是在DSE 5.0.4中得到了和以前一樣的錯誤。我試圖在DSE 5.0.3中保留默認值**#cql_solr_query_paging:off **,它的工作正常。在這兩種情況下,它都不適用於DSE 5.0.4。我的5.0.4 cassandra同時運行solr和spark,這會成爲問題嗎? – Prajith

+0

cql_solr_query_paging:關閉應該沒問題。請保持原樣。然後嘗試您的查詢。您應該可以使用solr/spark組合。請您告訴我您在「cql_solr_query_paging:driver」時使用的查詢嗎? – cdatta

+0

'select country_id,country_name from rptavlview.country where solr_query ='{「q」:「*:*」,「paging」:null,「start」:1}'limit 5;' ** InvalidRequest:Error from server :code = 2200 [無效的查詢] message =「您的驅動程序分頁處於活動狀態,它也會激活Solr深度分頁,不允許使用'start'參數。請停用分頁或閱讀Solr深度分頁限制並進行相應修改。在dse.yaml中,我已更新 'cql_solr_query_paging:driver' – Prajith