Lucene / Hibernate搜索 - 查询相关集合?

时间:2011-11-04 20:02:39

标签: java search lucene indexing hibernate-search

我正在编写一个基于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能否运行此类查询?还有什么我应该做的吗?是否有其他注释我可能会丢失?

1 个答案:

答案 0 :(得分:1)

Hibernate Search非常适合这种查询;但它可以用更简单的方式完成。

关于你的问题:由Hibernate Search(Lucene)索引的文本将被分析,默认分析器适用:

  1. 输入的下壳
  2. 在空格上单独划分
  3. 因此,如果您将查询定义为TermQuery(我假设您所做的是,因为它是最简单的形式),那么您必须匹配令牌的小写形式(没有间距)。

    考虑到这一点,您可以将所有关键字转储到Item实体的单个Blob字符串中,而无需将其作为单独的关键字映射,将它们链接在由空格分隔的单个字符串中。