Solr lucene server не публикует сообщение о коммите - PullRequest
0 голосов
/ 26 мая 2011

У нас есть переменная CommonsHttpSolrServer с именем «server», которую мы выполняем server.add (...) с правильно отформатированным SolrInputDocument с парой полей на нем (id и accountNumber). Наши документы не отображаются в репозитории Solr. Когда мы скопировали исходный код демонстрационного инструмента Solr SimplePostTool (который вручную форматирует сообщение HTTP), сервер Solr был обновлен. Когда мы сравнили разницу между двумя сообщениями, мы обнаружили, что код SimplePostTool отправлял последующее сообщение, состоящее из

<commit/>

Несмотря на то, что у нас есть server.commit (), ни один тэг коммитов никогда не размещается на нашем сервере Solr при непосредственном взаимодействии с CommonsHttpSolrServer. Мы также попробовали решение в http://www.mail-archive.com/solr-dev@lucene.apache.org/msg12289.html попытаться заставить коммит быть опубликованным на сервере Solr, но коммит все еще не появляется. Когда мы выполняем наш server.add (...), а затем запускаем SimplePostTool, фиксация, предоставленная SimplePostTool, приводит к успешной фиксации всех ожидающих обновлений Solr.

Наш вопрос заключается в том, как принудительно отправить коммит на сервер Solr с помощью CommonsHttpSolrServer вместо того, чтобы взламывать необработанный HTTP-пост.

мы используем solr-core 3.1.0

Спасибо!

Вот код, о котором идет речь, это Groovy-код, настроенный через Spring, я могу предложить другой пример, если хотите.

//message queue listener receives an ImagingMessage
class ImagingProcessor {
  SolrServer server
  void process(ImagingMessage message) {
    server.add(DocumentFactory.createDocument(message.indexedFields, message.file))
    server.commit()
        //also tried http://www.mail-archive.com/solr-dev@lucene.apache.org/msg12289.html 
        //and varios flavors of .commit(boolean, boolean)
  }
}

class ImagingMessage {
  List<IndexedField> indexedFields
  byte[] file
}

class DocumentFactory {
  static SolrInputDocument createDocument(List<IndexedField> indexedFields, byte[] file) {
    SolrInputDocument solrInputDocument = new SolrInputDocument()
    indexedFields.each {
      solrInputDocument.addField it.name, it.value
    }
    solrInputDocument.addField "content", file
    println solrInputDocument.toString()
    solrInputDocument
  }
}

Вместо использования server.commit () у нас есть решение, основанное на SimplePostTool, которое публикует тег, но это просто уродливый временный хак.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...