繁体   English   中英

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

[英]Hibernate Search 3.1.1 - How to search multiple words in same phrase on a field in any order

我已经将Spring 3.0和Hibernate core 3.3.2 GA与hibernate search 3.1.1集成到了现有应用程序中。 使用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属性。 它将该字段的字符串值划分为标记,即单个单词。 因此您可以按任何顺序搜索。 但是请注意,您必须进入整个世界。 例如,搜索“美国”时可以找到“美国”,“州”,“州联合”,“美国联合”等。但是,Hibernate搜索将需要整个单词。 只有“ Uni”不起作用。

编辑:

对于旧版本的Hibernate Search Apis:

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

您是否尝试过使用PhraseQuery.setSlop(int) 这应该允许单词重新排序。 请查看Javadoc以获取更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM