【问题标题】:How to get Hibernate Search to index如何让 Hibernate Search 建立索引
【发布时间】:2012-05-09 13:20:22
【问题描述】:

我有一个正在尝试将休眠搜索集成到其中的应用。我正在使用休眠搜索 3.4.2。我有一个如下所示的域类:

@Indexed
公共组{

    @Fieldindex (index = Index.TOKENIZED, store = Store.YES)
    私有字符串组名;
}

在我的测试用例中,我创建了几个组并将它们保存到数据库中。一旦存储在数据库中,我就会创建索引,然后搜索给定的文本字符串。这似乎有效。

我遇到的问题是在创建索引后创建的任何新组都没有被索引。从我读过的内容来看,我认为一旦创建了索引,任何持久化的新项目都会自动使用新值进行索引,但这似乎不是我得到的行为。我在配置方式上有什么遗漏吗?或者我是否必须手动告诉 Hibernate Search 我添加了一个要索引的新对象?

不用说,我有点糊涂了……



[编辑] 我正在使用 JPA,所以我的休眠搜索配置包含在我的 persistence.xml 中,如下所示:



我可以看到索引文件已创建,我可以使用 Luke 查看内容,但当我持久化一个新对象时,它们似乎永远不会更新。

【问题讨论】:

  • 你会这么好心,在这里发布你的休眠搜索配置吗? @史蒂夫

标签: hibernate-search


【解决方案1】:

documentation 中所述“默认情况下,每次通过 Hibernate 插入、更新或删除对象时,Hibernate Search 都会更新相应的 Lucene 索引”。

我要做的是检查我的 persistence.xml,看看我是否不小心设置了 hibernate.search.indexing_strategy = manual

如果不是这样,也许你可以尝试强制它,看看是否有效?

hibernate.search.indexing_strategy = 事件

您使用的是哪个框架?也许看看这个问题的最后一个post

// 雅各布

【讨论】:

  • 默认情况下我没有设置该值。我已经将“事件” indexing_strategy 添加到 persistence.xml 文件中,但没有任何效果。
  • 尝试该帖子中指出的解决方案,设置 hibernate.search.worker.batch_size=1 似乎有效。谢谢指点...
  • 将 batch_size 设置为 1 是错误的方法。如果你这样做,你就有效地绕过了任何事务范围。自动索引通常应在事务提交时发生(在此会话/事务中已更改的所有实体)。我的猜测是您的问题出在事务处理中。您需要发布有关您的设置的更多信息以获得更多帮助。
猜你喜欢
  • 1970-01-01
  • 2013-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-07
相关资源
最近更新 更多