一)分词

1)正向/逆向最大匹配算法

典型:IKAnalyzer采用的是正向迭代最细粒度切分算法

IKAnalyzer源码简单分析:

http://www.cnblogs.com/huangfox/p/3282003.html

2)字典树(trieTree)

trieTree实现

http://www.cnblogs.com/huangfox/archive/2012/04/27/2474185.html

中文分词遇到的问题:

a)标准trieTree节点采用数组存储指针,如果是英文a-z用26长度的数组表示,但是中文不能用这种存储方式,节点数组长度等于中文字数。(内存撑不住!)

b)如何节点内部查询?采用数组进行二分查找,或者采用map。(ik结合了这两种方式)

具体还可以参考:

http://hxraid.iteye.com/blog/618962

3)消歧算法

4)新词识别算法(机构名、品牌名、专业名词、缩略语、网络新词等)

具体参考:

http://www.programmer.com.cn/12276/

二)索引

1)压缩算法

前缀后缀规则、差值规则

2)跳跃表

为了提高查找的性能,Lucene在很多地方采取的跳跃表的数据结构。

跳跃表(Skip List)是如图的一种数据结构,有以下几个基本特征:

  • 元素是按顺序排列的,在Lucene中,或是按字典顺序排列,或是按从小到大顺序排列。
  • 跳跃是有间隔的(Interval),也即每次跳跃的元素数,间隔是事先配置好的,如图跳跃表的间隔为3。
  • 跳跃表是由层次的(level),每一层的每隔指定间隔的元素构成上一层,如图跳跃表共有2层。

节选自:http://forfuture1978.iteye.com/blog/546824

三)检索

1)文本相关性算法(tfIdf)

tfIdf的详细解释:

http://www.ruanyifeng.com/blog/2013/03/cosine_similarity.html

lucene打分过程:

http://www.cnblogs.com/huangfox/archive/2012/07/02/2573333.html

2)字段排序过程中——优先级队列

请参考:

http://www.cnblogs.com/huangfox/archive/2012/07/11/2586232.html

相关知识:

a)堆排序

http://www.cnblogs.com/huangfox/archive/2012/06/30/2571216.html

四)扩展

1)相似检索(MoreLikeThis)

关键步骤:

a)字频统计

b)去噪(黑名单、词条长度)

c)计算词权(tfIdf)

d)构建query

F)检索

具体参考:

http://www.cnblogs.com/huangfox/archive/2012/07/05/2578179.html

2)拼写检查(SpellingChecker)

关键算法:

a)N-gram

b)编辑距离

具体参考:

http://www.cnblogs.com/huangfox/archive/2012/02/14/2350349.html

3)电商排序模型

多因子综合排序(略)

----------------------------------------------------------------

其他

1)自动关键词的应用(牵涉到相似检索)

2)同义词、近义词的应用

搜索引擎(lucene及周边) 涉及的一些算法总结的更多相关文章

  1. 搜索引擎Lucene之皮毛

    一.Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索 ...

  2. STL之涉及到的算法

    一.非变异算法 是一组不破坏操作数据的模板函数,用来对序列数据进行逐个处理.元素查找.子序列搜索.统计和匹配.非变异算法具有极为广泛的适用性,基本上可应用与各种容器. 1查找容器元素find 它用于查 ...

  3. [垂直化搜索引擎]lucene简介及使用

    摘自:大型分布式网站架构-设计与实践

  4. Lucene的FuzzyQuery中用到的Levenshtein Distance(LD)算法

    2019独角兽企业重金招聘Python工程师标准>>> Lucene的FuzzyQuery中用到的Levenshtein Distance(LD)算法 博客分类: java 搜索引擎 ...

  5. Lucene.net站内搜索—2、Lucene.Net简介和分词

    目录 Lucene.net站内搜索—1.SEO优化 Lucene.net站内搜索—2.Lucene.Net简介和分词Lucene.net站内搜索—3.最简单搜索引擎代码Lucene.net站内搜索—4 ...

  6. 1、什么是Lucene,Lucene能干什么

    1.什么是lucene  Lucene是一个全文搜索框架,而不是应用产品.因此它并不像http://www.baidu.com/ 或者google Desktop那么拿来就能用,它只是提供了一种工具让 ...

  7. Lucene.Net简介和分词

    Lucene.net站内搜索—2.Lucene.Net简介和分词 2015-03-24 23:10 by 邹琼俊, 118 阅读, 1 评论, 收藏, 编辑 Lucene.Net简介 Lucene.N ...

  8. Solr vs. Elasticsearch谁是开源搜索引擎王者

    当前是云计算和数据快速增长的时代,今天的应用程序正以PB级和ZB级的速度生产数据,但人们依然在不停的追求更高更快的性能需求.随着数据的堆积,如何快速有效的搜索这些数据,成为对后端服务的挑战.本文,我们 ...

  9. 搜索引擎Hoot的源码阅读(提供源码)

    开门见山,最近阅读了一下一款开源引擎的源码,受益良多(学到了一些套路).外加好久没有写博客了(沉迷吃鸡,沉迷想念姑娘),特别开一篇.Hoot 的源码地址, 原理介绍地址.外加我看过之后的注释版本,当然 ...

随机推荐

  1. APK模式下,epg版本升级,需要做同步

    采用安卓盒子(APK模式),需要在管理节点做一个同步: 同步目录: /var/www/html/upgradestb 从管理节点向三台业务节点同步: 2018/01/19 conf/server.co ...

  2. Unity 3D读取Excel表格、导入信息、导出Json

    Unity 3D读取/导入Excel表格 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar ...

  3. Arcgis API for JS——打印控件乱码

    在通过Arcgis API for JS编写打印控件进行地图下载时,总发现地图字体乱码,如下图: 解决方法: 在装有ArcGIS Server,要调用服务的电脑或服务器上找到下图文件夹

  4. ubuntu下配置环境

    https://blog.csdn.net/zzc15806/article/details/73662491

  5. 快速排序改进——3区快速排序(3-way quicksort)

    1.快速排序缺陷 快速排序面对重复的元素时的处理方法是,把它放在了左部分数组或右部分数组,下次进行分区时,还需检测它.如果需要排序的数组含有大量重复元素,则这个问题会造成性能浪费. 解决方法:新增一个 ...

  6. Go Example--值运算

    package main import "fmt" //通过import导入fmt标准包 func main() { //+号可以用做连接字符串 fmt.Println(" ...

  7. 一个天气的微服务springcloud

    1.开发环境 jdk8  和 gradle 4. ---------------搭建一个天气预报系统 1.bootstrap就是一堆样式文件,首先有html标签,然后加上各种样式以后就变得好看了2.j ...

  8. Connect模块解析 转载

    来自对<了不起的Node.js>一书的学习ConnectNode.js为常规的网络应用提供了基本的API.然而,实际情况下,绝大部分网络应用都需要完成一系列类似的操作,这些类似的操作你一定 ...

  9. MongoDB高可用集群搭建(主从、分片、路由、安全验证)

    目录 一.环境准备 1.部署图 2.模块介绍 3.服务器准备 二.环境变量 1.准备三台集群 2.安装解压 3.配置环境变量 三.集群搭建 1.新建配置目录 2.修改配置文件 3.分发其他节点 4.批 ...

  10. Spring的依赖注入的2种方式(1天时间)

    今天花了一天的时间才调试出来 private      接口   实现类的那个bean; 最后面的那个名字不能随便的写,必须是配置文件中,实现类的那个bean 就是后面的那个名字写错了,花了整整一天 ...