java - Hibernate Search 3.1.1 - 如何以任意顺序搜索字段中同一短语中的多个单词

标签 java hibernate search lucene hibernate-search

我已将 hibernate search 3.1.1 与我现有的 Spring 2.5 和 Hibernate core 3.3.2 GA 应用程序集成在一起。对于 hibernate-search-3.1.1,我使用的是 apache lucene 2.4.1。

我面临的问题是,当我按顺序搜索单个单词或多个单词时,它会完美搜索并返回结果,但是当我不按顺序搜索带有空格的多个单词时,它不会返回任何结果。例如,如果我有一个文本索引为

“你好,伟大的世界!”

现在如果我搜索“Hello”或“great world”,它会成功返回结果,但如果我搜索“world Hello”,它不会返回结果。

我想要的是如果任何完整或部分单词与索引文本匹配,则能够返回结果。我的源代码如下:

FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(this.entityManager);

// create native Lucene query
String[] fields = new String[] { "text", "description", "standard.title", "standard.briefPurpose", "standard.name" };
MultiFieldQueryParser parser = new MultiFieldQueryParser(fields, new StandardAnalyzer());
org.apache.lucene.search.Query query = null;

try {
    query = parser.parse(searchTerm);
} catch (ParseException e) {
    e.printStackTrace();
}

// wrap Lucene query in a javax.persistence.Query
FullTextQuery persistenceQuery = fullTextEntityManager.createFullTextQuery(query, Requirement.class);

// execute search
@SuppressWarnings("unchecked")
List<Requirement> result = persistenceQuery.getResultList();

return result;

如果我需要添加任何内容来支持我的愿望,请帮助。

最佳答案

我知道这是一个非常古老的问题。但对于其他人来说,这个简短的描述可能会有所帮助。

您应该在 pojo 类中使用带有 @Field 注释的 analyze = Analyze.YES 属性。它将该字段的字符串值划分为标记,即单个单词。因此您可以按任意顺序进行搜索。但请注意,你必须进入整个世界。例如,要搜索“United States of America”,可以使用“America”、“States”、“States United”、“America United”等找到。但 Hibernate 搜索需要整个单词。只有“Uni”不起作用。

编辑:

对于旧版本的 Hibernate Search API:

必须使用 Index.TOKENIZED 而不是带有 @Field 注释的 analyze = Analytics.YES

关于java - Hibernate Search 3.1.1 - 如何以任意顺序搜索字段中同一短语中的多个单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23003796/

相关文章:

java - 将一些 MYSQL 放入命名查询中

java - 从文本中找出一个单词的所有行号

java - Hibernate和Spring数据存储库,保存或更新后对象不完整

python - 有效地搜索一对有噪声的有序列表

java - Spring Boot 应用程序在尝试运行时抛出启动失败错误

java - 跟踪更改的数据库设计 - w/Hibernate

java - 将类映射到没有表名的表

c++ - 推荐用于 gem 迷阵游戏的改进匹配查找算法?

excel - MS Excel 在搜索功能中通过测距

java - 如何使用 weblogic 和 JPA 在 Spring 中处理事务