【问题标题】:Hibernate Search 3.1.1 - How to search multiple words in same phrase on a field in any orderHibernate Search 3.1.1 - 如何以任何顺序在一个字段上搜索同一短语中的多个单词
【发布时间】:2014-05-25 02:09:27
【问题描述】:

我已将 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;

如果我需要添加任何东西来支持我想要的东西,请帮忙。

【问题讨论】:

    标签: java hibernate search lucene hibernate-search


    【解决方案1】:

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

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

    编辑:

    对于旧版本的 Hibernate Search APIs:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2018-07-12
        • 2020-07-06
        • 2019-12-06
        • 1970-01-01
        • 2023-03-20
        • 2014-01-10
        • 1970-01-01
        • 2015-08-20
        • 1970-01-01
        相关资源
        最近更新 更多