我正在编写一个基于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能否运行此类查询?还有什么我应该做的吗?是否有其他注释我可能会丢失?
答案 0 :(得分:1)
Hibernate Search非常适合这种查询;但它可以用更简单的方式完成。
关于你的问题:由Hibernate Search(Lucene)索引的文本将被分析,默认分析器适用:
因此,如果您将查询定义为TermQuery(我假设您所做的是,因为它是最简单的形式),那么您必须匹配令牌的小写形式(没有间距)。
考虑到这一点,您可以将所有关键字转储到Item实体的单个Blob字符串中,而无需将其作为单独的关键字映射,将它们链接在由空格分隔的单个字符串中。