我正在编写一个基于 Seam 的应用程序,使用 JPA/Hibernate 和 Hibernate Search (Lucene)。我有一个名为 Item 的对象,它与一个对象具有多对多关系 关键词。看起来像这样(省略了一些注释):
@Indexed
public class Item {
...
@IndexedEmbedded
private List<Keyword> keywords;
...
}
@Indexed
public class Keyword {
...
@Field
private String value;
...
}
我希望能够对包含特定关键字值的所有 Item 对象运行查询。我在我的数据库中设置了许多测试对象,看起来索引正在正确创建。但是,当我为 "keywords.value" = <MY KEYWORD VALUE>
创建并运行查询时我总是返回 0 个结果。
Hibernate Search/Lucene 是否有能力运行这种类型的查询?还有什么我应该做的吗?是否有我可能遗漏的其他注释?
最佳答案
Hibernate Search 非常适合这种查询;但它可以用更简单的方式完成。
关于您的问题:Hibernate Search (Lucene) 索引的文本将被分析,并且应用默认分析器:
- 输入小写
- 在空白处拆分成单独的术语
因此,如果您将查询定义为 TermQuery(我假设这就是您所做的,因为它是最简单的形式),那么您必须匹配标记的小写形式(无间距)。
记住这一点,您可以将所有关键字转储到 Item 实体上的单个 Blob 字符串中,而无需将其映射为单独的关键字,将它们链接到一个由空格分隔的字符串中。
关于java - Lucene/Hibernate Search - 查询关联的集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8015089/