SolrJ выполняет кеширование? - PullRequest
2 голосов
/ 18 августа 2011

Я использую Solr в своем веб-приложении в качестве поисковой системы. Я использую DataImportHandler для автоматического импорта данных из моей базы данных в поисковый индекс. Когда DataImportHandler добавляет новые данные, данные успешно добавляются в индекс, но не возвращаются при запросе индекса с использованием SolrJ: мне нужно перезапустить сервер приложений, чтобы найти данные, найденные SolrJ. Есть ли какое-то кэширование? Я использовал SolrJ во встроенном режиме. Вот мой код SolrJ:

private static final SolrServer solrServer = initSolrServer();
private static SolrServer initSolrServer() {
    try {
        CoreContainer.Initializer initializer = new CoreContainer.Initializer();
        coreContainer = initializer.initialize();
        EmbeddedSolrServer server = new EmbeddedSolrServer(coreContainer, "");
        return server;
    } catch (Exception ex) {
        logger.log(Level.SEVERE, "Error initializing SOLR server", ex);
        return null;
    }
}

Затем для запроса я делаю следующее:

SolrQuery query = new SolrQuery(keyword);
QueryResponse response = solrServer.query(query);

Как видите, мой SolrServer объявлен как статический. Должен ли я создать новый EmbeddedSolrServer для каждого запроса вместо этого? Боюсь, это повлечет за собой большие потери производительности.

1 Ответ

0 голосов
/ 29 марта 2012

Стандартная конфигурация Solr Server не обеспечивает автоматической фиксации.Если у вас есть файл solrconfig.xml, найдите закомментированный тег «autoCommit».Если нет, то после каждого добавленного документа вы можете вызывать server.commit();, хотя при большом потоке документов это может привести к большой проблеме производительности (так как commit - относительно тяжелая операция).в веб-приложении я бы посоветовал использовать Solr-xxwar в своем развертывании вместо EmbeddedSolrServer.Это предоставит вам богатый Http-интерфейс для обновления, администрирования и поиска в индексе.

...