2015-04-14 3 views
1

Я использую DataStax Кассандру и SolrnextCursorMark отсутствует в глубоком пейджинге с использованием 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); 

Мой schema.xml Solr выглядит как :

<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" 
      } 
     ] 
     } 
    } 
+1

Я не уверен, что ваше определение 'uniqueKey' действительно, прочитайте здесь http://stackoverflow.com/questions/24454755/how-to-set-multiple-fields-as-uniquekey-in- solr, что объясняет, почему cursorMark остается отсутствующим, поскольку у вас нет действительного 'uniqueKey' – cheffe

ответ

1

Deep пейджинг доступен как в 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.

Вы можете получить копию DSE 4.7 выпуска программы раннего доступа через http://eap.datastax.com/ (который я не хотел бы предложить для производства, но у него есть Solr 4.7).

для того, чтобы позволить подкачки в Solr в более ранних версиях (Apache Solr < 4.7), вам придется взломать пейджинг. Запрос gr ожидаемый результат с лимитом на «строка», а индекс «start» набора может быть жизнеспособной альтернативой.

Отъезд official example

Использование: rows и start

Пример:

?q=yourquery&rows=10&start=0 Тогда ?q=yourquery&rows=10&start=10

Это не красиво, но пока DSE 4.7 не будет отпущена для общественного потребления, это является приемлемой альтернативой.

Смежные вопросы