zoukankan      html  css  js  c++  java
  • 使用lucene实现社会化搜索

    百度百科上对社会化搜索的定义是“社会化搜索的意思就是通过搜索形成一个有共同爱好的人际圈子,又通过搜索每个人的爱好和收藏为用户提供一个更为准确的信息。”前半句说明社会化搜索一定依附于某一个社交平台,有平台才能形成圈子,才能有社交数据来作为社会化搜索的基础;后半句更确切的说,就是个性化搜索,根据用户个性化数据来调整排序的规则,所以不同的人会看到不同的内容。

    社会化搜索按照功能可以划分为“过滤”搜索和“加权”搜索。

    • 过滤搜索:用户可以通过设定规则来过滤搜索结果,比如facebook的搜索朋友的页面,可以选择好友,城市,居住地来作为过滤条件,筛选出目标。
    • 加权搜索:这一项很难让察觉到,因为它只改变条目的分数,进而调整排序,google就对google+的内容进行了加权,据说和“+1”有关。

    上面的功能都能通过lucene来实现,而且并不复杂。其实在stackoverflow上已经有了不错的解答,排在第二的答案的解决方式更漂亮一些:社会化数据存储在索引外,继承lucene的CustomScoreQuery载入社会化数据实现搜索功能。社会化数据储存在索引外有三个优点:

    1. 数据变动频繁,如果存放在索引内部会频繁的更新索引,会更快的遇到性能瓶颈。
    2. 具有更强的描述能力(neo4j是个很好的选择,不过数据量小的情况下key-value数据库也可以),比如,可以搜索好友的动态,好友的好友,好友的好友的动态,而放到索引中只能完成单一的功能,需求变化了还要索引新的数据,索引的体积会程几何倍增长。
    3. 功能解耦,易于调试。

    代码地址:https://github.com/sunan/LuceneTips

  • 相关阅读:
    Unity The Method Signature Matching Rule
    Unity The Property Matching Rule
    Unity The Type Matching Rule
    Unity The Custom Attribute Matching Rule
    Unity The Member Name Matching Rule
    Unity No Policies
    Unity The Return Type Matching Rule
    Unity The Parameter Type Matching Rule
    Unity The Namespace Matching Rule
    关于TSQL递归查询的(转)
  • 原文地址:https://www.cnblogs.com/nanpo/p/2667002.html
Copyright © 2011-2022 走看看