Lucene的Spring Beans配置

时间:2013-08-29 06:20:04

标签: java spring spring-mvc lucene javabeans

所以我通过混合Spring Beans xml配置和Lucene来测试我的一个小实验(或者我认为这更像是我懒得把所有这些都放到java代码中)。

基本上,我不是必须编写所有前提条件来编写IndexWriter,而只是将它的一个实例注入一个类。 (是的,我很懒)

但是我尝试通过bean实例化SimpleFSDirectory时遇到了一些困难,特别是,我希望我的Lucene索引位于相对于web-app的路径中。 (也许是/ WEB-INF / lucene-index等)

我目前的配置是这样的:

<bean id="standardAnalyzer" class="org.apache.lucene.analysis.standard.StandardAnalyzer">
    <!-- org.apache.lucene.util.Version -->
    <constructor-arg>
        <value>LUCENE_44</value>
    </constructor-arg>
</bean>

<bean id="fileDir" class="java.io.File">
<constructor-arg index="0">
        <value>classpath:/test-lucene-store</value>
    </constructor-arg>
</bean>

<bean id="directory" class="org.apache.lucene.store.SimpleFSDirectory">
    <constructor-arg index="0">
        <ref bean="fileDir"/>
    </constructor-arg>
</bean>

<bean id="indexWriterConfig" class="org.apache.lucene.index.IndexWriterConfig">
    <constructor-arg index="0">
        <value>LUCENE_44</value>
    </constructor-arg>
    <constructor-arg index="1">
        <ref bean="standardAnalyzer" />
    </constructor-arg>
</bean>

<bean id="indexWriter" class="org.apache.lucene.index.IndexWriter">
    <constructor-arg index="0">
        <ref bean="directory" />
    </constructor-arg>
    <constructor-arg index="1">
        <ref bean="indexWriterConfig" />
    </constructor-arg>
</bean>

我的测试日志说classpath:**不是有效路径,但是如果我只使用/lucene-store,则会在D://lucene-store(远离目标目标)创建索引

你们中有谁知道实现目标的方法吗?

1 个答案:

答案 0 :(得分:1)

使用java.io.File实现文件系统位置,而不是classpath条目。当然,你总是可以引用一个爆炸的.war并做这样的事情(在Tomcat上):

<value>#{ systemProperties['catalina.base'] }/webapps/myapp.war/WEB-INF/lucene-store</value>

但是,更灵活的方法是将值保存在外部位置(例如属性文件):

<value>#{ myConfig['lucene-store-root'] }</value>

...甚至使用java.io.tmpdir系统属性进行测试:

<value>#{ systemProperties['java.io.tmpdir'] }/lucene-store</value>

您还可以切换到其他目录实施(example)。