使用具有复合唯一键的 Solr 进行深度分页时缺少 nextCursorMark

问题描述 投票:0回答:2

我正在使用 DataStax Cassandra 和 Solr

Cassandra 2.0.10.71 | DSE 4.6.0 | CQL spec 3.1.1 | Thrift protocol 19.39.0

我的 Cassandra 列族为:

    CREATE TABLE kSpace.colfam1 (
      id text,
      date timestamp,
      desc text,
      origin set<text>,
      PRIMARY KEY ((id), date)
    ) WITH CLUSTERING ORDER BY (date DESC);

我的 Solr 的 schema.xml 看起来像:

    <schema name="kSpace.colfam1" version="1.5">
      <types>
        <fieldType name="string" class="solr.StrField"/>
        <fieldType name="StringCollectionField" class="solr.StrField" multiValued="true"/>
        <fieldType name="tdate" class="solr.TrieDateField" precisionStep="0" positionIncrementGap="0"/>

        <fieldType name="text" class="solr.TextField">
            <analyzer>
              <tokenizer class="solr.StandardTokenizerFactory"/>
                  <filter class="solr.LowerCaseFilterFactory"/>
            </analyzer>
          </fieldType>
      </types>

        <fields>
          <field name="id" type="string" indexed="true" stored="true" required="true"/>
          <field name="date"  type="tdate" indexed="true" />
          <field name="desc" type="text" indexed="true" />
          <field name="origin" type="StringCollectionField" indexed="true" />
        </fields>

        <defaultSearchField>desc</defaultSearchField>
        <uniqueKey>(id,date)</uniqueKey>
    </schema>

当我使用 Solr 使用以下查询进行查询时:

    http://localhost:8983/solr/kSpace.colfam1/select?
      q=*%3A*
      &sort=id+asc%2C+date+desc
      &rows=2
      &wt=json
      &indent=true
      &cursorMark=*

响应返回,但没有任何 nextCursorMark:

    {
      "responseHeader": {
        "status": 0,
        "QTime": 1,
        "params": {
          "sort": "id asc, date desc",
          "indent": "true",
          "q": "*:*",
          "_": "1429004324135",
          "cursorMark": "*",
          "wt": "json",
          "rows": "2"
        }
      },
      "response": {
        "numFound": 284901,
        "start": 0,
        "docs": [
          {
            "_uniqueKey": "[\"000047bc-921d-4487-b5f3-c70520e0a7bf\",\"1428601411276\"]",
            "id": "000047bc-921d-4487-b5f3-c70520e0a7bf",
            "date": "2015-04-09T17:43:31.276Z",
            "desc": "description1 description2"
          },
          {
            "_uniqueKey": "[\"0000531e-efee-42b4-9c52-136e9a106827\",\"1428601409625\"]",
            "id": "0000531e-efee-42b4-9c52-136e9a106827",
            "date": "2015-04-09T17:43:29.625Z",
            "desc": "description3 description4"
          }
        ]
      }
    }
cassandra solr pagination datastax-enterprise unique-key
2个回答
1
投票

从 Solr 4.7 开始可以使用深度分页。

DSE 4.6.x 有 Solr 4.6。您必须等待未来的版本(可能是 4.7)才能使用此功能。


1
投票

拉胡尔,

正如 phact 所说,DataStax Enterprise 主要版本 4.6.x 将不包括 Solr 4.7(Apache Solr 支持深度分页的最早版本,即引入“nextCursorMark”的时候。

您可以通过 http://eap.datastax.com/ 获取 DSE 4.7 早期访问计划版本的副本(我不建议用于生产用途,但它确实有 Solr 4.7)。

为了在早期版本的 Solr 中允许分页(Apache Solr < 4.7), you'll have to hack around paging. Requesting a grouped result with a limit on 'row' and a set 'start' index could be a viable alternative.

查看官方示例

使用:开始

示例:

?q=yourquery&rows=10&start=0
然后
?q=yourquery&rows=10&start=10

这并不漂亮,但在 DSE 4.7 发布供公众使用之前,这是一个可行的替代方案。

© www.soinside.com 2019 - 2024. All rights reserved.