<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>一个故事@MySQL DBA &#187; sphinx</title>
	<atom:link href="http://www.orczhou.com/index.php/tag/sphinx/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.orczhou.com</link>
	<description>一个故事@MySQL DBA</description>
	<lastBuildDate>Tue, 20 Dec 2011 15:51:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Sphinx之配置篇</title>
		<link>http://www.orczhou.com/index.php/2010/01/sphinx-how-to-2/</link>
		<comments>http://www.orczhou.com/index.php/2010/01/sphinx-how-to-2/#comments</comments>
		<pubDate>Thu, 07 Jan 2010 12:33:31 +0000</pubDate>
		<dc:creator>orczhou</dc:creator>
				<category><![CDATA[技术细节]]></category>
		<category><![CDATA[sphinx]]></category>

		<guid isPermaLink="false">http://orczhou.com/?p=619</guid>
		<description><![CDATA[<p style="text-indent:0">
<strong>作者：</strong>周振兴 <a href="http://www.flickr.com/photos/26825745@N06/3933896112/" title="mail by orczhou, on Flickr"><img src="http://farm3.static.flickr.com/2614/3933896112_8ebfd42177_o.png" width="163" height="22" alt="mail" /></a><br />
<strong>摘要：</strong>MySQL提供了LIKE子句可以很好的实现对数据库中数据的模糊搜索，使用LIKE很多时候可以帮助我们解决一些站内搜索的问题。但是随着MySQL中数据量逐渐增加，LIKE模糊查询的效率将成为MySQL数据库的主要压力。这时候<a href="http://orczhou.com/index.php/2009/08/sphinx-1/">尝试使用sphinx</a>，可以很好的帮你解决这个问题。本文将继续介绍具体如何部署sphinx。在阅读本文前，建议先浏览<a href="http://orczhou.com/index.php/2009/08/sphinx-1/">sphinx使用介绍(前篇)</a>，或者跳过本文直接<a href="http://www.sphinxsearch.com/docs/">RTFM</a>。
</p>
<p>[......]</p><p class='read-more'><a href='http://www.orczhou.com/index.php/2010/01/sphinx-how-to-2/'>继续阅读</a></p>]]></description>
			<content:encoded><![CDATA[<p style="text-indent:0">
<strong>作者：</strong>周振兴 <a href="http://www.flickr.com/photos/26825745@N06/3933896112/" title="mail by orczhou, on Flickr"><img src="http://farm3.static.flickr.com/2614/3933896112_8ebfd42177_o.png" width="163" height="22" alt="mail" /></a><br />
<strong>摘要：</strong>MySQL提供了LIKE子句可以很好的实现对数据库中数据的模糊搜索，使用LIKE很多时候可以帮助我们解决一些站内搜索的问题。但是随着MySQL中数据量逐渐增加，LIKE模糊查询的效率将成为MySQL数据库的主要压力。这时候<a href="http://orczhou.com/index.php/2009/08/sphinx-1/">尝试使用sphinx</a>，可以很好的帮你解决这个问题。本文将继续介绍具体如何部署sphinx。在阅读本文前，建议先浏览<a href="http://orczhou.com/index.php/2009/08/sphinx-1/">sphinx使用介绍(前篇)</a>，或者跳过本文直接<a href="http://www.sphinxsearch.com/docs/">RTFM</a>。
</p>
<p><span id="more-619"></span></p>
<p style="text-indent:0">
+++++++++++++++++++++++++++++++++<br />
<strong>正文：</strong><br />
+++++++++++++++++++++++++++++++++
</p>
<p style="text-indent:0"><font size=4><b>一、下载，安装</b></font></p>
<p>下载<a href="http://www.sphinxsearch.com/downloads.html">sphinx-0.9.8.1.tar.gz</a>(在撰写本文时，0.9.8.1是最新版)</p>
<p>安装过程够简洁，在GNU/Linux 2.6.24  Ubuntu 8.04.3 LTS:</p>
<blockquote><pre>
tar zxvf sphinx-0.9.8.1.tar.gz
cd sphinx-0.9.8.1
./configure    #这里你可以加上你的安装路径如：./configure --prefix=/usr/local/sphinx
make
sudo make install</pre>
</blockquote>
<p style="text-indent:0"><font size=4><b>二、配置sphinx的数据源</b></font></p>
<p>sphinx主要有两个进程indexer和searchd，在他们运行前，我们需要配置好sphinx.conf文件，告诉他们如何工作。(默认配置文件的路径/usr/local/etc/)</p>
<p>首先，我需要配置一个数据源(source)，告诉indexer到哪儿去获取原始数据。例如，我们将配置一个名为mars的数据源：</p>
<blockquote><pre>
cd /usr/local/etc/
cp sphinx.conf.dist sphinx.conf
vi sphinx.conf
source mars
{
	type = mysql
	sql_host = localhost
	sql_user = sphinxuser
	sql_pass = sI9sWb2uFYxz
	sql_db = discuzdb
	sql_sock = /var/run/mysqld/mysqld.sock
	sql_port = 3306
	……
</pre>
</blockquote>
<p>这里我配置了一个名为mars的数据源。数据类型是mysql，表示indexer将从mysql中获取我要的数据(除了mysql，sphinx还支持很多种类的数据源，如文本，xml文档等)。这里还配置了访问该数据库的主机名、用户、密码、数据库名、数据库端口、以及连接该数据库的socket文件。(注意：配置文件中有一些多余的source需要删除，如source src1throttled : src1)</p>
<p>现在indexer知道去那个数据库取数据了，但是具体取哪个数据表中的哪些列的数据呢？好，我们继续。编写需要索引的数据列的SQL，例如我需要索引字段为cdb_thread.threadtitle，那么sphinx需要用到的SQL是:</p>
<blockquote><pre>
	sql_query = SELECT tid AS id, threadtitle FROM cdb_threads;
}
</pre>
</blockquote>
<p>我们注意到，我们的query中一个时id字段，第二个才是我们需要索引的内容。sphinx有这样的规则，你的Query中获取的第一个字段必须是一个唯一的数字（使用自增的字段是很方便的），后面才是你需要索引的内容（另外，也可以你想排序的字段，这里暂不介绍）。</p>
<p>到这，我们就完成了一个数据源的配置，这里的我们的数据源名字是mars（如果需要，我们还可以配置更多数据源，例如Juliet等）。</p>
<p style="text-indent:0"><font size=4><b>三、配置sphinx的索引任务</b></font></p>
<p>现在有了：数据源以及需要索引的内容。接下来，我们需要在配置文件中，指定一个某个索引任务去索引前面的内容。这个索引任务应该包含：数据源用哪一个、数据数据放在什么目录下、以及其他的一些索引算法的细节参数。</p>
<blockquote><pre>
index explorer{
	source = mars              #还记得前面建立的source吧？
	path    = /var/data/sphinx/catalog    #任务的工作空间在哪，sphinx需要一些空间建立索引
	morphology              = stem_en      #搜索的一些“词法”  我也不知道这是什么！:-(

	min_word_len            = 3   
	min_prefix_len          = 0   
	min_infix_len           = 3   
}
</pre>
</blockquote>
<p style="text-indent:0"><font size=4><b>四、sphinx搜索配置</b></font></p>
<p>最后，还剩一点点工作。那就是配置searchd，你甚至保持默认就可以了。searchd中定义了一些搜索行为，例如当搜索结果集太大的时候，最多返回多少个（默认1000），等等。</p>
<p>搞定配置文件，98%的事情就算完成了。</p>
<p style="text-indent:0"><font size=4><b>五、启动、使用Sphinx</b></font></p>
<p>所有工作都已经就绪了，现在是倒计时启动的时间了。</p>
<p>执行indexer，对数据进行一次索引。</p>
<blockquote><p>
sudo /usr/local/bin/indexer [&#45;&#45;rotate] &#45;&#45;config /usr/local/etc/sphinx.conf explorer<br />
//这里的explorer就是前面配置文件中一个索引任务
</p></blockquote>
<p>启动搜索相应进程（searchd）：</p>
<blockquote><p>
sudo mkdir -p /var/data/sphinx<br />
sudo /usr/local/bin/searchd &#45;&#45;config /usr/local/etc/sphinx.conf &#038;
</p></blockquote>
<p>好了，搞定。我们来测试一下吧：（早就迫不及待了吧）</p>
<blockquote><p>
例如查找字符串 “ENG”<br />
sudo usr/local/bin/search &#45;&#45;config /usr/local/etc/sphinx.conf ENG<br />
看看你的搜索结果
</p></blockquote>
<p>如果搜索结果正常，到这，我们就完成全部的sphinx配置和启动工作。在接下来的一篇文章中我将介绍如果使用php向sphinx发送搜索请求，并处理返回结果。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.orczhou.com/index.php/2010/01/sphinx-how-to-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>sphinx使用介绍(前篇)</title>
		<link>http://www.orczhou.com/index.php/2009/08/sphinx-1/</link>
		<comments>http://www.orczhou.com/index.php/2009/08/sphinx-1/#comments</comments>
		<pubDate>Wed, 19 Aug 2009 14:51:51 +0000</pubDate>
		<dc:creator>orczhou</dc:creator>
				<category><![CDATA[技术细节]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[sphinx]]></category>

		<guid isPermaLink="false">http://orczhou.com/?p=630</guid>
		<description><![CDATA[<p><span>到今天为止</span><span><a title="蛋蛋网" href="http://www.oiegg.com" target="_blank">校内论坛</a></span><span>（</span><span lang="EN-US">Discuz</span><span>）上的主题数量已经到达了</span><span lang="EN-US">40w</span><span>，所有回复约</span><span lang="EN-US">500W</span><span>。随着数据量的增大，</span><span lang="EN-US">DZ</span><span>自带的站内搜索给数据库的带来的压力越来越大，甚至会导致数据库停止服务(MyISAM在SLOW Query和update并发问题)。取代站内搜索，我们使用了</span><span lang="EN-US">google</span><span>的自定义搜索服务，</span><span lang="EN-US">google</span><span>的速度非常快，但是对于论坛来说，Google不能返回实时的搜索结果，而且也无法定制搜索（如安装标题、作者、内容）。</span></p>
<p><span><span>所以，我们将尝试使用</span><a href="http://www.sphinxsearch.com/" target="_blank">sphinx</a><span>来解决这个问题。先看看sphinx是怎样工作的：</span></span>[......]</p><p class='read-more'><a href='http://www.orczhou.com/index.php/2009/08/sphinx-1/'>继续阅读</a></p>]]></description>
			<content:encoded><![CDATA[<p><span>到今天为止</span><span><a title="蛋蛋网" href="http://www.oiegg.com" target="_blank">校内论坛</a></span><span>（</span><span lang="EN-US">Discuz</span><span>）上的主题数量已经到达了</span><span lang="EN-US">40w</span><span>，所有回复约</span><span lang="EN-US">500W</span><span>。随着数据量的增大，</span><span lang="EN-US">DZ</span><span>自带的站内搜索给数据库的带来的压力越来越大，甚至会导致数据库停止服务(MyISAM在SLOW Query和update并发问题)。取代站内搜索，我们使用了</span><span lang="EN-US">google</span><span>的自定义搜索服务，</span><span lang="EN-US">google</span><span>的速度非常快，但是对于论坛来说，Google不能返回实时的搜索结果，而且也无法定制搜索（如安装标题、作者、内容）。</span></p>
<p><span><span>所以，我们将尝试使用</span><a href="http://www.sphinxsearch.com/" target="_blank">sphinx</a><span>来解决这个问题。先看看sphinx是怎样工作的：</span></span><span id="more-630"></span></p>
<p><a style="text-decoration: none;" title="sphinxII by orczhou, on Flickr" href="http://www.flickr.com/photos/26825745@N06/3836256375/"><img src="http://farm4.static.flickr.com/3543/3836256375_4a27c665cb_o.png" alt="sphinxII" width="492" height="357" /></a></p>
<ol>
<li>sphinx有两个主要进程indexer和searchd。indexer，正如其名，她的任务是从数据库（或者其他的数据源）收集原始的数据，然后建立相应的索引。searchd则是通过读取indexer建立的索引来响应客户端的请求。如果用图书馆来打比方的话，一个是按照索书号整理数目的工作人员，一个是帮你从书架上取书的人。</li>
<li>要让sphinx为你工作的话，需要做几件事(在配置文件中完成)：<br />
1) 告诉sphinx，数据源在哪儿(配置source，对应MySQL的话，就是填写其主机名、登录用户、密码等)<br />
2) 建立“索引任务”。告诉indexer针对数据源的哪一部分建立索引，建立索引时数据源的编码、最小索引长度等细节信息</li>
<li>执行indexer，完成前面配置文件中的“索引任务”；启动searchd服务。</li>
</ol>
<p>这样你的应用就可以通过sphinx提供的API来搜索数据库中的数据了，sphinx会为你返回对应数据的主键。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.orczhou.com/index.php/2009/08/sphinx-1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

