java - Lucene/Hibernate Search - 查询关联的集合?

标签 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 是否有能力运行这种类型的查询?还有什么我应该做的吗?是否有我可能遗漏的其他注释?

最佳答案

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

关于您的问题:Hibernate Search (Lucene) 索引的文本将被分析,并且应用默认分析器:

  1. 输入小写
  2. 在空白处拆分成单独的术语

因此,如果您将查询定义为 TermQuery(我假设这就是您所做的,因为它是最简单的形式),那么您必须匹配标记的小写形式(无间距)。

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

关于java - Lucene/Hibernate Search - 查询关联的集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8015089/

相关文章:

java - Docker无法访问jar文件

java - 如何将数据从列表适配器发送到 android 中的 Activity ?

Python:在文件中搜索字符串

mysql - 全索引扫描搜索包含算法

elasticsearch - 在 ElasticSearch 5.6.3 中获取嵌套文档的聚合导致 Lucene 异常

java - Lucene:获取类别的最新文档

lucene - 如何估计 Lucene 索引的大小?

java - 在 Spring 中启用日志记录

java - 为什么我的 avrokey 数据说它是一个通用记录当我明确地将数据写为 AvroKey<SpecificRecord> 时?

ios - 如何连接两个字段以使用 NSPredicate 进行搜索?