solr索引目录与扩展

1.solr 如何读取索引

在solrconfig.xml中可以配置solr的索引目录。

<dataDir>${solr.data.dir:./solr/data}</dataDir>

默认是在目录./solr/data,如果使用分布式的话,这个配置要跟主机一致。

 

 

如果有存在文件index.properties,则读取index=index.20101102052813,获得指定的索引目录index.20101102052813,只在创建indexSearchers 或者indexwriters时调用。

 

在这里有个疑问,这个index.properties是什么时候出现的,在solrconfig里没有配置的,难道是因为分布式的时候,主机生成的,然后分发到各个子机上。暂时还没有看到这边的代码 ,不过听上司说是这样的。

 

2.solr扩展DirectoryFactory插件,以应用自己实现的Directory,比如使用HDFS

solr获取Directory,是由实现抽象类DirectoryFactory的StandardDirectoryFactory (默认),调用open(String path) 方法,而实现类StandardDirectoryFactory

public class StandardDirectoryFactory extends DirectoryFactory {
  public Directory open(String path) throws IOException {
    return FSDirectory.open(new File(path));
  }
}

 

只是简单地在实现open(String path)中,使用lucene的FSDirectory.open(new File(path));来获取 Directory的引用。

在这里便用户便可以在些扩展自己的实现类,通过继承DirectoryFactory,比如实现内存的索引Directory

 

public class RAMDictoryFactory extends DirectoryFactory {
    public Directory open(String path) throws IOException {
        return new RAMDirectory();
    }
}

 

然后在solrconfig.xml上配置扩展的DirectoryFactory

 

<directoryFactory name="DirectoryFactory" class="com.wole.solr.mySolrExt.RAMDictoryFactory">
    Parameters as required by the implementation
  </directoryFactory >

 

这样在初始化SolrCore时就会,调用

private void initDirectoryFactory() {
    DirectoryFactory dirFactory;
    PluginInfo info = solrConfig.getPluginInfo(DirectoryFactory.class.getName());
    if (info != null) {
      dirFactory = (DirectoryFactory) getResourceLoader().newInstance(info.className);
      dirFactory.init(info.initArgs);
    } else {
      dirFactory = new StandardDirectoryFactory();
    }
    // And set it
    directoryFactory = dirFactory;
  }

 

从源代码可以看出,默认是不用配置DirectoryFactory的,如果没有配置就使用StandardDirectoryFactory类。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(String,Solr,Lucene,扩展,Parameters,Path)