原文地址:http://blog.itpub.net/29806344/viewspace-1399621/

在分析sphix原理之前,我先澄清一下为什么经常出现coreseek这个词?

因为sphinx默认不支持中文索引及检索,而coreseek基于sphinx开发了coreseek全文检索服务器,它提供了为sphinx设计的中文分词包libmmseg包含mmseg中文分词,是目前用的最多的sphinx中文检索。
    在没有sphinx之前,mysql数据库要对海量的文章中的词进行全文索引,一般用的语句例如:SELECT   ***  WHERE  ***  LIKE   '%word%';这样的LIKE查询,并且再结合通配符%,是使用不到mysql本身的索引,需要全表扫描,时间超慢的!

如果用到sphinx,全文索引交给sphinx来做,sphinx返回含有该word的ID号,然后用该ID号直接去数据库准确定位那些数据,整个过程如下图:

sphinx的索引文件存储的不是完整的数据,只是由ID和分词组成的数组,由于索引文件不同直接查看,但我们可以通过search工具来验证:

先建索引:

/usr/local/coreseek/bin/indexer -c
/usr/local/coreseek/etc/sphinx.conf

Coreseek Fulltext 4.1 [ Sphinx 2.0.2-dev
(r2922)]

Copyright (c) 2007-2011,

Beijing Choice Software Technologies Inc
(http://www.coreseek.com)

再通过search 查找单词test:

/usr/local/coreseek/bin/search test -c
/usr/local/coreseek/etc/sphinx.conf

Coreseek Fulltext 4.1 [ Sphinx 2.0.2-dev
(r2922)]

Copyright (c) 2007-2011,

Beijing Choice Software Technologies Inc
(http://www.coreseek.com)

using config file '/usr/local/coreseek/etc/sphinx.conf'...

index 'test1': query 'test ': returned 3
matches of 3 total in 0.050 sec

displaying matches:

1. document=1, weight=2421, group_id=1,
date_added=Thu Jan  8 21:43:32 2015

id=1

group_id=1

group_id2=5

date_added=2015-01-08
21:43:32

title=test
one

content=this
is my test document number one. also checking search within phrases.

2. document=2, weight=2421, group_id=1,
date_added=Thu Jan  8 21:43:32 2015

id=2

group_id=1

group_id2=6

date_added=2015-01-08
21:43:32

title=test
two

content=this
is my test document number two

3. document=4, weight=1442, group_id=2,
date_added=Thu Jan  8 21:43:32 2015

id=4

group_id=2

group_id2=8

date_added=2015-01-08
21:43:32

title=doc
number four

content=this
is to test groups

words:

1. 'test': 3 documents, 5 hits

再通过search 查找单词this:

/usr/local/coreseek/bin/search this -c
/usr/local/coreseek/etc/sphinx.conf

Coreseek Fulltext 4.1 [ Sphinx 2.0.2-dev
(r2922)]

Copyright (c) 2007-2011,

Beijing Choice Software Technologies Inc
(http://www.coreseek.com)

using config file
'/usr/local/coreseek/etc/sphinx.conf'...

index 'test1': query 'this ': returned 4
matches of 4 total in 0.000 sec

displaying matches:

1. document=1, weight=1304, group_id=1,
date_added=Thu Jan  8 21:43:32 2015

id=1

group_id=1

group_id2=5

date_added=2015-01-08
21:43:32

title=test
one

content=this
is my test document number one. also checking search within phrases.

2. document=2, weight=1304, group_id=1,
date_added=Thu Jan  8 21:43:32 2015

id=2

group_id=1

group_id2=6

date_added=2015-01-08
21:43:32

title=test
two

content=this
is my test document number two

3. document=3, weight=1304, group_id=2,
date_added=Thu Jan  8 21:43:32 2015

id=3

group_id=2

group_id2=7

date_added=2015-01-08
21:43:32

title=another
doc

content=this
is another group

4. document=4, weight=1304, group_id=2,
date_added=Thu Jan  8 21:43:32 2015

id=4

group_id=2

group_id2=8

date_added=2015-01-08
21:43:32

title=doc
number four

content=this
is to test groups

words:

1. 'this': 4 documents, 4 hits

由此,我们可以看到,search 关键词
主要返回的是含有表ID和命中率的数组。

注意:不知道大家有没有想到一个致命的问题,创建了sphinx全文索引后,如果在mysql中新增加数据,不重新indexer一下,sphinx索引是搜索不到的!即使是加参数–rotate,数据多的情况下,也要很长时间,这个问题怎么解决呢!明天就来讲主索引和增量索引,以及用cron来处理新数据自动加入增量索引中。

补充:

sphinx续4-coreseek的工作原理的更多相关文章

  1. springMVC 的工作原理和机制

    工作原理上面的是springMVC的工作原理图: 1.客户端发出一个http请求给web服务器,web服务器对http请求进行解析,如果匹配DispatcherServlet的请求映射路径(在web. ...

  2. springMVC 的工作原理和机制(转)

    工作原理上面的是springMVC的工作原理图: 1.客户端发出一个http请求给web服务器,web服务器对http请求进行解析,如果匹配DispatcherServlet的请求映射路径(在web. ...

  3. DHCP 工作原理

    DHCP 详解 DHCP 工作原理 一.什么是DHCP? DHCP,动态主机配置协议,前身是BOOTP协议,是一个局域网的网络协议,使用UDP协议工作,常用的2个端口:67(DHCP server), ...

  4. VMware vSphere中的HA工作原理介绍

    http://blog.51cto.com/linkinsds/416738 HA全称High Availability.它是VMware的企业应用环境中用来保障企业级应用的不间断运行需求所产生的一个 ...

  5. Buck工作原理分析,连续模式,断续模式

    Part01:Buck电路工作原理: 图1-1 Buck电路拓扑结构 Buck电路的拓扑结构如图1-1所示: (1) input接输入电源,既直流电动势: (2) IGBT1为开关管,可以选择以全控型 ...

  6. 170529、springMVC 的工作原理和机制

    工作原理上面的是springMVC的工作原理图: 1.客户端发出一个http请求给web服务器,web服务器对http请求进行解析,如果匹配DispatcherServlet的请求映射路径(在web. ...

  7. SQL索引工作原理

    SQL 当一个新表被创建之时,系统将在磁盘中分配一段以8K为单位的连续空间,当字段的值从内存写入磁盘时,就在这一既定空间随机保存,当一个8K用完的时候, SQLS指针会自动分配一个8K的空间.这里,每 ...

  8. Spring MVC的工作原理和机制

    Spring  MVC的工作原理和机制 参考: springMVC 的工作原理和机制 - 孤鸿子 - 博客园https://www.cnblogs.com/zbf1214/p/5265117.html ...

  9. 浅谈C++编译原理 ------ C++编译器与链接器工作原理

    原文:https://blog.csdn.net/zyh821351004/article/details/46425823 第一篇:      首先是预编译,这一步可以粗略的认为只做了一件事情,那就 ...

随机推荐

  1. 在VMware Workstation上安装Kali Linux

    在VMware Workstation上安装Kali Linux VMware Workstation是一款功能强大的桌面虚拟计算机软件.该软件允许用户在单一的桌面上同时运行不同的操作系统,并且可以进 ...

  2. ZOJ 3157 Weapon

    题目传送门 题意:就是CF round# 329 B 的升级版,要求出相交点的个数 分析:逆序数用树状数组维护,求出非逆序数,然后所有情况(n * (n - 1)) / 2减之就是逆序数个数. #in ...

  3. Codeforces 161D Distance in Tree(树的点分治)

    题目大概是,给一棵树,统计距离为k的点对数. 不会DP啊..点分治的思路比较直观,啪啪啪敲完然后AC了.具体来说是这样的: 树上任何两点的路径都可以看成是一条过某棵子树根的路径,即任何一条路径都可以由 ...

  4. HDU3987 Harry Potter and the Forbidden Forest(边数最少的最小割)

    方法1:两遍最大流.一遍最大流后,把满流边容量+1,非满流边改为INF:再求最小割即为答案. 我大概想了下证明:能构成最小割的边在第一次跑最大流时都满流,然后按那样改变边容量再求一次最小割,就相当于再 ...

  5. POJ2112 Optimal Milking(最大流)

    先Floyd求牛到机器最短距离,然后二分枚举最长的边. #include<cstdio> #include<cstring> #include<queue> #in ...

  6. BZOJ2739 : 最远点

    把环倍长,设$w(i,j)$表示对于$i$,决策$j$的价值,如果$j$在$[i,i+n]$,那么$w(i,j)=dis(i,j)$,否则$w(i,j)=-dis(i,j)$. 则$w$满足四边形不等 ...

  7. ios ASIHttpLib 同步请求和异步请求

    1.同步请求可以从因特网请求数据,一旦发送同步请求,程序将停止用户交互,直至服务器返回数据完成,才可以进行下一步操作, 2.异步请求不会阻塞主线程,而会建立一个新的线程来操作,用户发出异步请求后,依然 ...

  8. 【POJ】2653 Pick-up sticks(计算几何基础+暴力)

    http://poj.org/problem?id=2653 我很好奇为什么这样$O(n^2)$的暴力能过.... 虽然说这是加了链表优化的,但是最坏不也是$O(n^2)$吗...(只能说数据太弱.. ...

  9. 【NOIP2003】传染病控制(-贪心/dfs)

    我自己yy了个贪心算法,在某oj 0msAC~.然后去wikioi提交,呵呵,原来是之前oj的数据太弱给我水过了,我晕. 我之前的想法是在这棵树上维护sum,然后按时间来割边,每一时刻割已经感染的人所 ...

  10. Java接口、Java抽象类、C++抽象类的区别

    由于这三种数据类型都是为了创建类层次结构的顶层构架,且用法有些许相似之处,这里简单区分一下: 接口: 接口用interface关键字定义, 名字一般使用-able形式的形容词. 接口通常定义抽象方法和 ...