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

Java Hibernate Search 3.1.1-如何按任意顺序搜索字段中同一短语中的多个单词,java,hibernate,search,lucene,hibernate-search,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”,它会成功返回

我已经将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;
FullTextEntityManager FullTextEntityManager=Search.getFullTextEntityManager(this.entityManager);
//创建本地Lucene查询
字符串[]字段=新字符串[]{“text”、“description”、“standard.title”、“standard.briefPurpose”、“standard.name”};
MultiFieldQueryParser解析器=新的MultiFieldQueryParser(字段,新的StandardAnalyzer());
org.apache.lucene.search.Query Query=null;
试一试{
query=parser.parse(searchTerm);
}捕获(解析异常){
e、 printStackTrace();
}
//在javax.persistence.query中包装Lucene查询
FullTextQuery persistenceQuery=fullTextEntityManager.createFullTextQuery(查询,需求.类);
//执行搜索
@抑制警告(“未选中”)
List result=persistenceQuery.getResultList();
返回结果;

如果我需要添加任何东西来支持我的愿望,请提供帮助。

您是否尝试使用
PhraseQuery.setSlop(int)
?这应该允许单词重新排序。有关更多信息,请查看。

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

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

编辑:

对于较旧版本的Hibernate搜索API:

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