一日三项令人兴奋的Lucene功能

昨天是富有成效的一天:突然,Lucene有了三个令人兴奋的新功能。

表达式模块

昨天提交的第一个功能是新的expressions模块 。 这使您可以使用任意String表达式定义用于排序的动态字段。 内置了对JavaScript解析的支持,但是如果您想创建自己的语法,则解析器是可插入的。

例如,您可以使用表达式定义排序字段

sqrt(_score) + ln(popularity)

如果您想主要通过相关性来提供混合排序,并通过受欢迎度字段来提高混合排序。

该代码非常易于使用。 在TestDemoExpressions.java单元测试用例中,有一些很好的示例,这将在Lucene的下一个稳定版本(4.6)中提供。

可更新的数字文档值字段

第二个功能也是昨天提交的,它是可更新的数字文档值字段 ,可让您使用IndexWriter上的新updateNumericDocValue方法更改以前索引的数字值。 它可以与近实时阅读器配合使用,因此您可以更新一些文档的数值,然后重新打开新的近实时阅读器以查看更改。

该功能目前仅是主干,因为我们可以解决一些涉及特别有争议的布尔值的剩余问题。 当前它也不适用于稀疏字段,即,仅当该文档已首先对该字段建立索引时,您才能更新该文档的值。

结合使用这两种功能后,您可以使用功能强大的用例,在这些用例中,您可以根据随时间变化的混合字段进行排序。 例如,也许您测量了用户单击搜索结果中每个文档的频率,然后使用它来更新popularity字段,然后将该popularity字段用于混合排序。 这样,当您向用户学习哪些文档很受欢迎而哪些文档不受欢迎时,搜索结果的排名就会随着时间而变化。

当然,使用自定义外部代码以前总是可以使用这种功能,但是现在有了表达式和可更新的文档值,实现起来就变得微不足道了!

免费文字建议

最后,第三个功能是一个新的建议程序实现,即FreeTextSuggester 。 它是与现有建议完全不同的建议者:它不是使用有限的预建建议范围中的建议,而是使用简单的ngram语言模型基于1个或2个先前标记来预测可能建议的“长尾巴”。

ShingleFilter ,它使用ShingleFilter创建ngram,并使用FST存储和查找生成的ngram模型。 尽管将多个ngram模型紧凑地存储在单个FST中,但FST仍然会变得很大; 建立在AOL查询日志上的3克,2克和1克模型为19.4 MB(查询本身为25.4 MB)。 这是受到Google方法的启发。

可能不会单独使用此建议者,而是当您的主要建议者未能找到任何建议时作为备用。 您可以通过Google查看这种行为。 尝试搜索“ the fast and”,您将看到建议仍然是完整的查询。 但是,如果您键入的下一个单词是“ burning”,那么google(到目前为止!)突然没有完整的建议,并退回到其自由文本方法。

参考:我们的JCG合作伙伴 Michael Mc Candless在一天内通过Changeing Bits博客提供了三项令人兴奋的Lucene功能

翻译自: https://www.javacodegeeks.com/2013/09/three-exciting-lucene-features-in-one-day.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值