Как индексировать данные в определенном сегменте с помощью solrj

Я использую solrj в качестве клиента для индексации документов в облаке solr (используя solr4.5)

У меня было требование сохранять документы на основе tenant_id, поэтому я пытаюсь выполнить маршрутизацию документов. Это возможно, только если коллекция создана с использованием параметра numShards (http://searchhub.org/2013/06/13/solr-cloud-document-routing/)

У меня есть два экземпляра solr в облаке solr (example1/solr и example2/solr) и exrenal zookeeper, который работает на порту 2181.

Оба экземпляра состоят из коллекции с именем коллекция1.

Я создал еще одну коллекцию под названием newCollection (с двумя осколками и двумя репликами), используя http://localhost:8501/solr/admin/collectionsaction=CREATE&name=newCollection&numShards=2&replicationFactor=2&maxShardsPerNode=2&router.field=id

Итак, в примере1/solr-> у меня есть newCollection_shard1_replica1 и newCollection_shard2_replica1,

В примере2/solr -> у меня есть newCollection_shard1_replica2 и newCollection_shard2_replica2

Я скопировал example1/solr/collection1/conf во все шарды и реплики.

Я перезапустил сервер zookeeper, а также экземпляры solr:

зоопарк-> zkServer.cmd

example1/solr-> java -Dbootstrap_confdir=./solr/newCollection_shard1_replica1/conf -Dcollection.configName=myconf -DzkHost=localhost:2181 -jar start.jar

пример2/solr->java -DzkHost=localhost:2181 -jar start.jar

(Оба экземпляра работают на разных портах, один на 8081, а другой на 8051)


Я использую клиент solrj для индексации документов

Вот мой пример кода

String url="http://localhost:8081/solr"
ConcurrentUpdateSolrServer solrServer= new ConcurrentUpdateSolrServer(url, 10000, 4);
SolrInputDocument doc = new SolrInputDocument();
doc.addField("id", "shard1!513");
doc.addField("name", "Santhosh");
solrServer.add(documents);
solrServer.commit();

Но он сохраняет документ в коллекции1 с идентификатором shard1!513, требуются ли какие-либо изменения конфигурации в solrconfig.xml (я использую файл solrconfig.xml по умолчанию, поставляемый с solr4.5)

Как сохранить документы в моей новой коллекции? и как сделать маршрутизацию документов?

Пожалуйста, помогите мне с проблемой.

Спасибо!


person santhosh    schedule 20.10.2013    source источник


Ответы (3)


Вы можете использовать CloudSollServer и UpdateRequest

SolrServer solrServer = new CloudSolrServer(zkHost) // zkHost is your solr zookeeper host string
SolrInputDocument doc = new SolrInputDocument();
UpdateRequest add = new UpdateRequest();
add.add(document);
add.setParam("collection", "newCollection");
add.process(solrServer);

UpdateRequest commit = new UpdateRequest();
commit.setAction(UpdateRequest.ACTION.COMMIT, true, true);
commit.setParam("collection", "newCollection");
commit.process(solrServer);
person syan    schedule 01.05.2014

Я добавил основное имя новой коллекции к URL-адресу. так что теперь работает нормально.

Вместо:

String url="http://localhost:8081/solr"

Я использовал:

String url="http://localhost:8081/solr/newCollection_shard1_replica1"
ConcurrentUpdateSolrServer solrServer= new ConcurrentUpdateSolrServer(url, 10000, 4);
SolrInputDocument doc = new SolrInputDocument();
doc.addField("id", "shard1!513");
doc.addField("name", "Santhosh");
solrServer.add(documents);
solrServer.commit();
person santhosh    schedule 21.10.2013

Вы должны использовать CloudSolrServer http://lucene.apache.org/solr/4_2_1/solr-solrj/org/apache/solr/client/solrj/impl/CloudSolrServer.html

Потому что в solrcloud обновления должны маршрутизироваться через zookeeper, так как zookeeper знает статус лидеров в облаке. Еще одна вещь, которую вам не нужно добавлять к URL-адресу имени коллекции, просто используйте setDefaultCollection (collectionName); метод CloudSollServer для отправки ваших обновлений в коллекцию collectionName

person Community    schedule 28.10.2013