我已经将hibernate搜索3.1.1与我现有的应用程序与Spring 2.5和hibernate core 3.3.2 GA集成在一起。使用hibernate-search-3.1.1,我使用的是apache lucene 2.4.1。
我面临的问题是,当我按顺序搜索一个单词或多个单词时,它会完美搜索并返回结果,但当我用空格按顺序搜索多个单词后,它不会返回任何结果。例如,如果我有一个作为索引的文本
"你好,伟大的世界!"
现在,如果我搜索"你好"或"伟大的世界",它会成功返回结果,但如果我搜索了"世界你好",它不会返回结果。
我想要的是,如果索引文本中的任何完整或部分单词匹配,则能够返回结果。我的源代码如下:
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
属性。它将该字段的字符串值划分为标记,即划分为单个单词。所以你可以按任何顺序搜索。但请注意,你们必须进入整个世界。例如,搜索"美利坚合众国"可以用"America"、"States"、"United States"one_answers"America United"等词找到。但Hibernate搜索需要完整的单词。只有"Uni"不起作用。
编辑:
对于旧版本的Hibernate搜索Apis:
必须使用Index.TOKENIZED
而不是带有@Field注释的analyze = Analyze.YES
。
您尝试过使用PhraseQuery.setSlop(int)
吗?这应该允许单词重新排序。查看Javadoc了解更多信息。