配置compass的索引位置为相对路径
配置compass的索引位置为相对路径:
Compass是对lucene进行封装的java项目,使得在spring,hibernate这种环境下非常容易的实现全文检索,也极大的提高了效率。所以在myblog里面我也使用了compass作为全文索引。 从Compass的samples里面的petclinic里面可以找到Compass的配置。?classpath:org/compass/sample/petclinic/petclinic.cmd.xmlclasspath:petclinic.cpm.xml?file://${user.home}/compass/petclinicorg.compass.spring.transaction.SpringSyncTransactionFactory?这里配置的索引位置是用的系统的绝对路径,可能大部分的人还是希望索引能放到项目的一个子目录里面,就是使用相对路径的方式。但是如果直接修改file://${user.home}/compass/petclinic?为?/compass/petclinic?这样是不行的。刚开始我也是这样修改的。其实我们看一下LocalCompassBean的源代码就知道怎么做了。 if (this.compassSettings != null) { config.getSettings().addSettings(this.compassSettings); } …… if (config.getSettings().getSetting(CompassEnvironment.CONNECTION) == null && connection != null) { config.getSettings().setSetting(CompassEnvironment.CONNECTION, connection.getFile().getAbsolutePath()); } 这里可以看到如果你配置compassSettings的时候配置过compass.engine.connection的话compass就会使用你配置的值也就是绝对路径。如果你没有配置就会去读connection的值,而connection的类型是org.springframework.core.io.Resource,这个是spring封装的资源类,提供很多种访问方式 file classpath ,这里就可以使用相对路径了。去掉compassSettings里面的compass.engine.connection 的配置,加上connection的配置就可以实现相对路径了。比如myblog里面的配置?classpath:com/jdkcn/compass?/lucene/indexesorg.compass.spring.transaction.SpringSyncTransactionFactory?webapp启动之后compass就会在你的应用的/lucene/indexes目录下建立索引了。