Распределенный поиск по нескольким экземплярам Solr - PullRequest
0 голосов
/ 25 мая 2011

У меня есть 100 миллиардов строк данных, которые я разделил на несколько экземпляров solr, каждая с отдельной схемой.

Мне нужно:

  • Запросить каждый экземпляр.
  • Получите результаты из каждого экземпляра.
  • Добавьте эти результаты к окончательному запросу.
  • Вызовите окончательный экземпляр Solr для окончательного результата.

Как я могу это сделать?Нужно ли писать отдельный запрос на помощь?

Например,

$ curl http://localhost:8983/solr/select?q=query1.result AND ... AND queryN.result

Ответы [ 4 ]

1 голос
/ 25 мая 2011

то, что вы ищете, называется распределенным поиском -> http://wiki.apache.org/solr/DistributedSearch

0 голосов
/ 14 октября 2012

Вы можете использовать комбинацию осколков и фильтра запросов :

  • использовать один solr, который выполняет поиск с использованием сегментов, используя параметр shards: http://wiki.apache.org/solr/DistributedSearch

, а затем

Пример:

ваш локальный 'комбинационный solr' работает на localhost: 8983, а другие solrs работают на host1: 8983, host2: 8983, ... Вы выполняете удаленный поиск по этим одноранговым узлам для 'field1: query1', но хотите отфильтровать из результатов запрос 'field2: query2'. Итак, вы звоните:

http://localhost:8983/solr/select?shards=host1:8983/solr,host1:8983/solr&q=field1:query1&fq=field2:query2

0 голосов
/ 07 сентября 2012

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

0 голосов
/ 16 июня 2011

я сделал это с помощью solrj (например, решение)

 File home = new File("C:\\workspace\\SolrMultipleCore\\solr");
 File f = new File( home, "solr.xml" );
 CoreContainer container = new CoreContainer();
 container.load( "C:\\workspace\\SolrMultipleCore\\solr", f );
 EmbeddedSolrServer server = new EmbeddedSolrServer( container,"core1");
 EmbeddedSolrServer server1 = new EmbeddedSolrServer( container,"core2");
 String query=params.getParams("q");
 String query1=params.getParams("q1");
 SolrQuery solrquery=new SolrQuery(query);
 QueryResponse q = server.query(solrquery);
 QueryResponse q1 = server1.query(solrquery);

Solr.xml

<solr persistent="true">
 <property name="snapshooter" value="C:\solr1\bin\snapshooter.sh" />
 <cores adminPath="/admin/cores">
  <core name="core1" instanceDir="core0"/>   
  <core name="core2" instanceDir="core1" />
 </cores>
</solr>

Тем не менее я делаю исследование, как это сделать внутри solr.

Дайте мне знать, если есть какие-либо детали, необходимые для этого

...