Solr:在服务器启动并运行时导入Lucene索引

时间:2016-02-16 14:21:07

标签: indexing solr lucene solrj

在这里阅读Can a raw Lucene index be loaded by Solr? Lucene索引可以导入到Solr中。当Solr服务器未运行时(在数据文件夹中使用所有需要的配置文件创建Solr核心文件夹结构),这很有效,但是当Solr服务器启动并运行时它不起作用。

是否有任何呼叫(通过休息端点或java api)告诉Solr重新扫描数据文件夹?

1 个答案:

答案 0 :(得分:2)

您希望使用lucene(outsite solr)生成索引并将其插入solr而不重新启动。

您不能直接更改索引文件夹。但是你可以create一个新核心指向已经构建的索引文件夹,switch/swap核心指向(过时的)旧文件夹。或者您可以merge旧核心中的新索引文件夹。

所有这一切都可以通过solrj admin api完成。

e.g。创建:

    CoreAdminRequest.Create req = new CoreAdminRequest.Create();
    req.setConfigName(configName);
    req.setSchemaName(schemaName);
    req.setDataDir(dataDir);
    req.setCoreName(coreName);
    req.setInstanceDir(instanceDir);
    req.setIsTransient(true);
    req.setIsLoadOnStartup(false); // <= unless its productive core.
    return req.process(adminServer);

e.g。交换:

    CoreAdminRequest request = new CoreAdminRequest();
    request.setAction(CoreAdminAction.SWAP);
    request.setCoreName(coreName1);
    request.setOtherCoreName(coreName2);
    request.process(solrClient);

对于SolrCloud,使用collections api的第一个“创建”方法,并使用别名而不是交换。

e.g。别名:

    CollectionAdminRequest.CreateAlias req = new CollectionAdminRequest.CreateAlias();
    req.setAliasedCollections(coreName);
    req.setAliasName(aliasName);
    return req.process(solrClient);