Чтение во всех документах (идентификатор документа, только если возможно) из Solr без поиска - PullRequest
0 голосов
/ 09 января 2019

Я знаю, что Solr предназначен для поиска.

Однако я провожу некоторые тесты и задаюсь вопросом, есть ли способ получить идентификатор документа для каждого проиндексированного документа.

Наилучшим вариантом является поиск без поиска (если есть способ).

Полагаю, альтернативой является запрос всех документов, но запрашивается только идентификатор документа.

Я буду использовать SolrJ, поэтому операции SolrJ будут полезны

1 Ответ

0 голосов
/ 09 января 2019

Используйте конечную точку /export: Экспорт наборов результатов .

Он поддерживает использование того же параметра fl, что и при обычном поиске (хотя поиск только *:*, вероятно, будет вести себя очень похоже при использовании SolrJ).

В SolrJ вам придется использовать класс CloudSolrStream вместо правильной потоковой передачи результатов (по сравнению с обычным поведением при поиске *:*).

Из Пример Джоэла Бернштейна при представлении функции :

import org.apache.solr.client.solrj.io.*;
import java.util.*;

public class StreamingClient {

   public static void main(String args[]) throws IOException {
      String zkHost = args[0];
      String collection = args[1];

      Map props = new HashMap();
      props.put("q", "*:*");
      props.put("qt", "/export");
      props.put("sort", "fieldA asc");
      props.put("fl", "fieldA,fieldB,fieldC");

      CloudSolrStream cstream = new CloudSolrStream(zkHost, 
                                                    collection, 
                                                    props);
      try {

        cstream.open();
        while(true) {

          Tuple tuple = cstream.read();
          if(tuple.EOF) {
             break;
          }

          String fieldA = tuple.getString("fieldA");
          String fieldB = tuple.getString("fieldB");
          String fieldC = tuple.getString("fieldC");
          System.out.println(fieldA + ", " + fieldB + ", " + fieldC);
        }

      } finally {
       cstream.close();
      }
   }
}
...