搜索引擎相关

Sphinx 和 CoreSeek

Sphinx 和 CoreSeek简介

Sphinx

Sphinx是一个基于SQL的全文检索引擎,可以结合MySQL、PostgreSQL做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。Sphinx特别为一些脚本语言设计搜索API接口,如PHP,Python,Perl,Ruby等,同时为MySQL也设计了一个存储引擎插件。

Sphinx单一索引最大可包含1亿条记录,在1千万条记录情况下的查询速度为0.x秒(毫秒级)。Sphinx创建索引的速度为:创建100万条记录的索引只需3~4分钟,创建1000万条记录的索引可以在50分钟内完成,而只包含最新10万条记录的增量索引,重建一次只需几十秒。

CoreSeek

CoreSeek为应用提供全文检索功能,目前的版本(2.x 3.x)基于Sphinx,支持使用Python定义数据源,支持中文分词。CoreSeek集合了Sphinx的功能,支持更多的数据源,在字典,建立索引,分词更好的支持中文。可以这样理解,CoreSeek就是支持中文的Sphinx全文检索。

ref: https://www.jianshu.com/p/b4d0dcedfc1d

Sphinx的工作流程

Sphinx工作流程图

Sphinx的整个工作流程就是Indexer程序到数据库里面提取数据,对数据进行分词,然后根据生成的分词生成单个或多个索引,并将它们传递给searchd程序。然后客户端可以通过API调用进行搜索。

流程图解释

  • Database:数据源,是Sphinx做索引的数据来源。因为Sphinx是无关存储引擎、数据库的,所以数据源可以是MySQL、PostgreSQL、XML等数据。

  • Indexer:索引程序,从数据源中获取数据,并将数据生成全文索引。可以根据需求,定期运行Indexer达到定时更新索引的需求。

  • Searchd:Searchd直接与客户端程序进行对话,并使用Indexer程序构建好的索引来快速地处理搜索查询。

  • APP:客户端程序。接收来自用户输入的搜索字符串,发送查询给Searchd程序并显示返回结果。

ElasticSearch

ElasticSearch可以当MongoDB用但不能完全取代,ElasticSearch是全文搜索引擎。

ElasticSearch的基本概念

1.集群:一个或者多个节点组织在一起

2.节点:一个节点是集群中的一个服务器,由一个名字来标识,默认是一个随机的漫威角色的名字。

3.分片:将索引划分为多份的能力,允许水平分割和扩展容量,多个分片响应请求,提高性能和吞吐量。(和数据库的索引不一样)

4.副本:创建分片的一份或多份的能力,在一个节点失败其余节点可以顶上。

ElasticSearch和Mysql对比理解概念

es_vs_mysql

documents (一段json)

HTTP方法

http_method

倒排索引

倒排索引源于实际应用中需要根据属性的值来查找记录。这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因为称为倒排索引(inverted index)。

带有倒排索引的文件我们称为倒排索引文件,简称倒排文件(inverted file)。

目前的搜索引擎中,一般底层的索引存储都使用的是倒排索引。

TF-IDF, elasticsearch的打分原理相关概念

TF-IDF(term frequency–inverse document frequency)是一种用于信息检索与数据挖掘的常用加权技术。TF是词频(Term Frequency),IDF是逆文本频率指数(Inverse Document Frequency)。

倒排索引待解决的问题

1.大小写转换问题(如:python和PYTHON是否视为同一个词)

2.词干抽取(如:looking和look是否应该处理为一个词)

3.分词(如:操作系统 应该分词为 “操作”和“系统”,还是“操作系统”)

4.倒排索引文件过大时,需要进行压缩编码

Whoosh

一个由纯Python实现的全文搜索引擎,没有二进制文件等,比较小巧,配置比较简单,当然性能自然略低。但小站点基本够用。 由于Whoosh自带的是英文分词,对中文的分词支持不是太好,故用一般工程上会使用jieba替换whoosh的分词组件。

haystack

haystack是django的开源搜索框架,该框架支持Solr, ElasticSearch, Whoosh, Xapian搜索引擎,不用更改代码,直接切换引擎,减少代码量。

ElasticSearch DSL

一个辅助ElasticSearch写请求和运行请求的高级python库。

官网地址: https://elasticsearch-dsl.readthedocs.io/en/latest/