Получение UUID из Apache Solr после фиксации - PullRequest
3 голосов
/ 01 июня 2011

Я использую Solrj для добавления новых документов в экземпляр Solr.В моей схеме документа идентификатором является UUID (solr.UUIDField).Каждый раз, когда создается документ, идентификатор заполняется уникальным идентификатором, который именно то, что я хочу.Иногда в моем приложении необходимо, чтобы я мог получить этот уникальный идентификатор, чтобы добавить его в качестве значения поля при вставке другого документа.Поэтому мой вопрос: как я могу получить этот сгенерированный uuid из solr после добавления документа?

Solrj возвращает мне этот UpdateResponse объект после фиксации, но я не знаю, как получитьновый uuid из него.

Я добавляю такой документ

CommonsHttpSolrServer server = new CommonsHttpSolrServer(MY_SERVER_URL);

SolrInputDocument doc = new SolrInputDocument();
// [...] multiple addField calls
server.add(doc);
UpdateResponse ur = server.commit();

1 Ответ

4 голосов
/ 01 июня 2011

AFAIK, вы никогда не получите UUID из надстройки или коммита. Когда вы делаете добавление или фиксацию, обработчик запроса на обновление возвращает вам время и статус запроса, но не более того (при условии, что это успешно). На самом деле вы можете увидеть, что находится в HTTP-ответе, выполнив ручное добавление / принятие следующим образом:

http://localhost:8983/solr/update?stream.body=<add><doc><field name="id">test</field><field name="title">test title</field></doc></add>
http://localhost:8983/solr/update?stream.body=<commit/>

Если вы выполните эти запросы в веб-браузере, они отправят тестовый документ и подтвердят его соответственно. После этого вы сможете увидеть, какая информация доступна для SolrJ (немного).

Вы можете написать свой собственный (модифицированный) обработчик обновлений на Java, но это кажется огромной работой. Вы также можете включить поле «timestamp» в своей схеме Solr, чтобы вы могли запросить solr по дате последнего изменения и найти элементы, которые вы только что зафиксировали.

Оба эти метода, тем не менее, будут серьезными взломами. Лучше всего, прежде чем отправлять их в Solr, выяснить уникальный идентификатор документов, а затем использовать этот уникальный идентификатор для их получения. Использование сгенерированного UUID - это скорее метод «запусти и забудь об этом». Поскольку вы не хотите забывать, вам нужно сгенерировать свой собственный UUID.

Поскольку вы используете Java, это должно быть очень просто сделать с UUID , используя некоторый код, подобный этому:

CommonsHttpSolrServer server = new CommonsHttpSolrServer(MY_SERVER_URL);

SolrInputDocument doc = new SolrInputDocument();
UUID uuid = UUID.randomUUID();
doc.addField("id", uuid.toString());
// [...] multiple addField calls
server.add(doc);
UpdateResponse ur = server.commit();
...