【问题标题】:Advanced Search Java Library高级搜索 Java 库
【发布时间】:2013-06-07 12:37:49
【问题描述】:

我正在向基于 JSF 的 CMS 产品添加高级搜索功能

搜索条件:

如果用户使用关键字 Assets 进行搜索,那么他应该能够获得包含 Asset 以及 Assets 的记录

我发现 Lucene 和 Solr 是进行全文搜索的最佳方式,我已经实现了 Apache Lucene Search,它的运行速度比普通查询结果快,但不能解决我的搜索条件。

还有其他的 Java 库可以帮助我达到这个标准吗?

【问题讨论】:

  • 无论单数还是复数,您都需要查找术语吗?例如,请参阅对this 问题的回答。编辑:顺便说一下,这称为复数/单词 stemming

标签: java mysql jsf solr lucene


【解决方案1】:

PorterStemmer 是在 Lucene 中支持这种词干提取的好选择。特别是,将PorterStemFilter 合并到您的分析器中将是典型的方法。在链接的PorterStemFilter 文档中列出了一个简单的示例,但可能看起来像(在本例中基于 StandardAnalyzer):

class MyStemmerAnalyzer extends Analyzer {
    @override
    public TokenStream tokenStream(String fieldName, Reader reader) {
        TokenStream stream = new StandardTokenizer(reader);
        stream = new StandardFilter(stream);
        stream = new LowerCaseFilter(stream);
        stream = new PorterStemFilter(stream);
        stream = new StopFilter(stream, StopAnalyzer.ENGLISH_STOP_WORDS_SET);
        return stream;
    }
}

【讨论】:

  • 感谢您试一试,让您知道
  • 如何将 Stemmer 应用于我的搜索字符串。
  • 正如我在回答中所说,您将 Stemmer 合并到分析器中。
  • 但是现在如果我搜索“gainers”,它会给出“gainer”,它应该给出“gain”(对吗?)
  • 不,这不像只是剥离任何可能是后缀的东西那么简单。您不希望“锤子”简化为“火腿”。该算法以不同的方式处理单词的不同部分,并且仅在看到两组元音后跟辅音后才删除“-er”,因此“hammer”不是词干,而是“hammerer”。也就是说,如果它落在this explanation 中标记为R2 的区域内,它只会删除“-er”(请参阅​​算法的其余部分explaination here
猜你喜欢
  • 2013-04-16
  • 1970-01-01
  • 2020-07-25
  • 2011-01-31
  • 2012-03-11
  • 2018-07-13
  • 2015-04-17
  • 2012-04-09
  • 2015-04-06
相关资源
最近更新 更多