所以我通过混合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
(远离目标目标)创建索引
你们中有谁知道实现目标的方法吗?
答案 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)。