Lucene 2.9 新功能盘点

Apache Lucene 项目是一个完全用Java编写的高性能、全功能的文本搜索引擎库,最近它发布了2.9版 。此次发布在2.4.1版的基础上进行了许多增强:

  • 单个Segment的查询及缓存,这使reopen操作的速度显著提高。
    • 这个功能对增量索引的更新很有帮助
  • 为IndexWriter增加了接近实时的搜索功能。
    • 这是Lucene从根本上开始支持实施搜索
  • 新的Query类型。
  • 更智能,伸缩性更强的多词(multi-term)查询(如Wildcard,Range等等)。
  • 最新优化过的Collector/Scorer API。
  • 新增的Unicode支持及字符集(Collation)。
  • 基于Attribute的TokenStream新API。
  • 在contrib中提供了新的QueryParser框架,并替换了核心实现。
  • 在基于字段搜索,或使用自定义的Collector的时候可取消Score功能,这样可以获得显著的性能提高。
    • 这在自定义排序的时候性能会有提升,减少了score的计算
  • 新的分析器(PesianAnalyzer,ArabicAnalyzer、SmartChineseAnalyzer)。
    • SmartChineseAnalyzer是基于词典的,基本功能应该是可以的。需要考察一下可扩展性。
  • 为大型文本新增快速向量高亮工具(fast-vector-highlighter)。
  • 对数字字段提供了高性能的查询支持。这些字段使用前缀树的结构进行索引,能直接支持简单而高效的数字范围查询,而不需要在外部对数字进行处理。

虽然Lucene团队打算在小版本的更新上做到完整的兼容,但是Lucene 2.9在不少方面破坏了这一点,详细信息可参考Changes 文档中“向前兼容策略的改变(Changes in backwards compatibilit policy)”一节。Lucene团队建议不要直接替换生产环境下的二进制包,而是在部署前重新编译应用程序,以便在出现兼容问题时获得提示并进行修补。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的使用Lucene评分功能的示例代码: ```java import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.index.DirectoryReader; import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.Term; import org.apache.lucene.queryparser.classic.MultiFieldQueryParser; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.Query; import org.apache.lucene.search.ScoreDoc; import org.apache.lucene.search.TermQuery; import org.apache.lucene.search.TopDocs; import org.apache.lucene.search.similarities.ClassicSimilarity; import org.apache.lucene.store.FSDirectory; import java.nio.file.Paths; public class LuceneScoreExample { public static void main(String[] args) throws Exception { String indexDir = "index"; String[] queryFields = {"title", "content"}; String queryString = "lucene"; FSDirectory directory = FSDirectory.open(Paths.get(indexDir)); IndexReader reader = DirectoryReader.open(directory); IndexSearcher searcher = new IndexSearcher(reader); searcher.setSimilarity(new ClassicSimilarity()); // 使用ClassicSimilarity评分算法 // 创建查询解析器 MultiFieldQueryParser queryParser = new MultiFieldQueryParser(queryFields, new StandardAnalyzer()); // 解析查询字符串 Query query = queryParser.parse(queryString); // 执行查询 TopDocs topDocs = searcher.search(query, 10); // 输出结果 for (ScoreDoc scoreDoc : topDocs.scoreDocs) { Document doc = searcher.doc(scoreDoc.doc); System.out.println(doc.get("title") + "\t" + scoreDoc.score); } reader.close(); directory.close(); } } ``` 在上面的示例代码中,我们使用Lucene的ClassicSimilarity评分算法,并使用MultiFieldQueryParser解析查询字符串。最后,我们执行查询并输出得分最高的文档的标题和得分。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值