使用Hibernate Search和Spring指定索引路径

时间:2014-04-09 04:02:18

标签: spring hibernate spring-mvc lucene hibernate-search

我在设置索引的正确路径时遇到问题。如果它在我的spring应用程序中会很棒,因为即使我将我的应用程序部署到Cloudbees之后它也会工作。

这是我试图索引的目标:

@Entity
@Table(name="educations")
@Indexed(index="educations")
public class Education {

我在servlet-context.xml中有以下内容:

<resources mapping="/resources/**" location="/resources/"/>

我像这样指定lucene索引路径:

Properties props = new Properties();
props.put("hibernate.search.default.indexBase", "resources/lucene/indexes");
entityManagerFactory.setJpaProperties(props);

哪个不给我任何错误,但我找不到文件夹,我不明白。我试着去搜索它。

我也尝试过:

props.put("hibernate.search.default.indexBase", "classpath:/lucene/indexes");

props.put("hibernate.search.default.indexBase", "/resources/lucene/indexes");

但仍无法找到该文件夹​​。但是经过一段时间的努力,我试着把它放在我的主目录中。 (这可能会在以后部署到云时遇到问题):

props.put("hibernate.search.default.indexBase", "/lucene/indexes");

我得到以下

Cannot write into index directory: /lucene/indexes for index educations

所以我假设它是一个权限错误。我在终端(OSX)中尝试以下内容:

sudo chmod -R u+rwX /lucene/indexes/

sudo chmod -R 755 /lucene/indexes/

但仍然是同样的错误。有人可以对此有所了解吗?

谢谢!

修改 经过一番调查后,我确信这是一个权限问题。如果我指定Spring应用程序的根目录的完整路径,它就可以工作。我仍然不知道如何指定它而不给它完整的路径。

1 个答案:

答案 0 :(得分:1)

相对路径相对于启动Java进程的目录。如果您在此脚本的目录中有一些启动脚本或类似的外观。绝对路径工作正常,但当然你需要权限写入它。

如果您想为您的案例提供更通用的解决方案,您可以在启动应用程序时将正确的目录设置为系统属性,并在创建属性时从那里读取它。或者您尝试以另一种方式在运行时确定应用程序的完整路径。