<?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>『 神仙居 』 &#187; coreseek</title>
	<atom:link href="http://www.azurey.com/blog/category/coreseek/feed" rel="self" type="application/rss+xml" />
	<link>http://www.azurey.com/blog</link>
	<description>better late than never</description>
	<lastBuildDate>Sat, 11 Feb 2012 12:07:36 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>coreseek给词库添加新词</title>
		<link>http://www.azurey.com/blog/2009/09/coreseek-add-new-words-to-the-lexicon.html</link>
		<comments>http://www.azurey.com/blog/2009/09/coreseek-add-new-words-to-the-lexicon.html#comments</comments>
		<pubDate>Tue, 01 Sep 2009 13:42:36 +0000</pubDate>
		<dc:creator>南晓晓</dc:creator>
				<category><![CDATA[coreseek]]></category>
		<category><![CDATA[词库]]></category>

		<guid isPermaLink="false">http://www.azurey.com/blog/2009/09/coreseek%e7%bb%99%e8%af%8d%e5%ba%93%e6%b7%bb%e5%8a%a0%e6%96%b0%e8%af%8d/</guid>
		<description><![CDATA[为coreseek应用的词库添加新词，步骤是先在词典文件添加新词条，然后用mmseg重新生成词库文件，替换原有词库文件，最后重建索引。]]></description>
			<content:encoded><![CDATA[<p>为coreseek应用的词库添加新词，步骤是先在词典文件添加新词条，然后用mmseg重新生成词库文件，替换原有词库文件，最后重建索引。</p>
<p>给词典文件加新词相对来说比较简单，用程序实现的话，貌似也不是很复杂。主要是对重复词条的判断，我是先读进数组再判断的，虽然现在文件还不算大，但是总觉得以后会影响效率，MS用sed会简单不止一点儿吧，神仙说的。在这里再一次感到作为一个linux小白的压力，= =。</p>
<p>接下来的两步用exec就可以实现了，但是，= =，权限好麻烦啊，一知半解，最后全777了，OTZ，好烦，不想看书。</p>
<p>有时候真的很懒，= =，懒得思考，所以有时候问得问题可能很白痴，非常感谢师傅的耐心解答。</p>
<p>over。= =</p>
]]></content:encoded>
			<wfw:commentRss>http://www.azurey.com/blog/2009/09/coreseek-add-new-words-to-the-lexicon.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>BuildExcerpts and UpdateAttributes</title>
		<link>http://www.azurey.com/blog/2009/08/buildexcerpts-and-updateattributes.html</link>
		<comments>http://www.azurey.com/blog/2009/08/buildexcerpts-and-updateattributes.html#comments</comments>
		<pubDate>Thu, 27 Aug 2009 12:18:21 +0000</pubDate>
		<dc:creator>南晓晓</dc:creator>
				<category><![CDATA[coreseek]]></category>
		<category><![CDATA[文档片段]]></category>
		<category><![CDATA[更新]]></category>
		<category><![CDATA[高亮]]></category>

		<guid isPermaLink="false">http://www.azurey.com/blog/2009/08/buildexcerptsampampampampupdateattributes/</guid>
		<description><![CDATA[今天主要就做了这两件事儿。

原型: function BuildExcerpts ( $docs, $index, $words, $opts=array() )

BuildExcerpts用来产生文档片段，有时候真怀疑到底是我思维有问题，还是coreseek设计的有问题，= =。不过此问题也不必太深究，既然用了，就暂且照着来吧。]]></description>
			<content:encoded><![CDATA[<p>今天主要就做了这两件事儿。</p>
<p>原型: function BuildExcerpts ( $docs, $index, $words, $opts=array() )</p>
<p>BuildExcerpts用来产生文档片段，有时候真怀疑到底是我思维有问题，还是coreseek设计的有问题，= =。不过此问题也不必太深究，既然用了，就暂且照着来吧。</p>
<p>这个方法效果不错，就是做法就点儿NC？= =。搜索后只拿到记录的id就不说啥了，再重新取数据得出二维数组，然后再把每一条记录中的某字段内容拿出来再做成数组，这个数组就是$docs了，然后使用BuildExcerpts方法得到高亮后的数组，再重新放回到原来的二维数组中。</p>
<p>到底是不是我想复杂了。。= =，$index只要写一个索引就行了。</p>
<p>再说UpdateAttributes吧。</p>
<p>原型: function UpdateAttributes ( $index, $attrs, $values )</p>
<p>立即更新指定文档的指定属性值。可以说，增量索引是为增量记录存在，这个方法则是为修改和删除考虑的。</p>
<p>修改跟删除，其实是一样的，不过从细处说又不太一样。</p>
<p>先说修改，我的做法是，写一个方法，只传入记录的id，然后从数据库取出记录，用此方法更新配置文件中所有的属性。这个其实还是很简单的，不过删除时碰到了点儿问题。后来经神仙指点，在配置文件sql_query的sql语句加一个字段，比如原来是select id, title, content from table，改成select id, title, content, 1 as del from table。这样只要在程序里多加一个过滤字段就可以了，删除时，只更新此字段，</p>
<p>$s-&gt;UpdateAttributes(&#8216;post_main, post_delta&#8217;, array(&#8216;del&#8217;), array($id =&gt; array(0)));</p>
<p>这样就可以了。</p>
<p>文档文档，写不来啊写不来。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.azurey.com/blog/2009/08/buildexcerpts-and-updateattributes.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>coreseek索引更新机制</title>
		<link>http://www.azurey.com/blog/2009/08/coreseek-index-update-mechanisms.html</link>
		<comments>http://www.azurey.com/blog/2009/08/coreseek-index-update-mechanisms.html#comments</comments>
		<pubDate>Wed, 26 Aug 2009 13:33:02 +0000</pubDate>
		<dc:creator>南晓晓</dc:creator>
				<category><![CDATA[coreseek]]></category>
		<category><![CDATA[sphinx]]></category>
		<category><![CDATA[增量索引]]></category>
		<category><![CDATA[索引更新]]></category>

		<guid isPermaLink="false">http://www.azurey.com/blog/2009/08/coreseek%e7%b4%a2%e5%bc%95%e6%9b%b4%e6%96%b0%e6%9c%ba%e5%88%b6/</guid>
		<description><![CDATA[= =，昨晚太晚睡觉，所以日记又没写。结果现在又不太记得昨天做了啥了。

还是先说今天吧。

今天的时间都花在coreseek的索引更新机制上了，原来是每隔一分钟更新增量索引，每天再重建一次索引。sph_counter 中存放区分主索引和增量索引的maxid。现在的方法，依旧是每分钟更新增量索引，但是重建索引改成合并，将增量索引合并到主索引中，并更改 sph_counter中的maxid值，清空增量索引。搜索则都是同时从两个索引中搜索。]]></description>
			<content:encoded><![CDATA[<p>= =，昨晚太晚睡觉，所以日记又没写。结果现在又不太记得昨天做了啥了。</p>
<p>还是先说今天吧。</p>
<p>今天的时间都花在coreseek的索引更新机制上了，原来是每隔一分钟更新增量索引，每天再重建一次索引。sph_counter 中存放区分主索引和增量索引的maxid。现在的方法，依旧是每分钟更新增量索引，但是重建索引改成合并，将增量索引合并到主索引中，并更改sph_counter中的maxid值，清空增量索引。搜索则都是同时从两个索引中搜索。</p>
<p>这个可是折腾了大半天才得出来的结果，合并索引不难。</p>
<p>其他两个都有问题，先说下今天碰到的情况。</p>
<p>先是更新sph_counter的maxid值，这个时候还没有考虑到清空增量索引，所以合并索引这步暂时是没有问题的，而合并索引后，再更新增量索引，还会得到第一次建立索引后的所有增量，因为没有改变maxid，后来在coreseek.cn上看到有人提到sql_query_post_index，可以更新增量索引后改变maxid值，于是在增量index中加入了这个选项，= =开始是手工更新增量索引，合并到主索引，这两步一起做，没有问题，后来用crontab才发现，增量索引每更新一次，前面的记录都会丢失，因为这些记录还没有合并到主索引就被更新的增量索引覆盖了。这个方法行不通，后来问了神仙，= =，原来脚本也可以更改数据表中的值，请教了一下，此问题解决。说完另一个问题，一起贴最终的脚本内容。</p>
<p>合并索引后，清空增量索引，到底怎么个清空法是个问题，开始的想法是直接删除增量索引文件，删除后加&#8211;rotate，更新增量索引会出错，出错信息好像是没有增量索引的文件吧。后来听神仙说，要去掉&#8211;rotate，没有出错，可是后面的每分钟更新增量索引会有问题，看了一下索引文件，只要加了&#8211;rotate的，生成的增量索引文件是delta_new.*，这样，虽然增量索引更新成功，却搜索不要更新的记录。如果不加&#8211;rotate，索引文件正常，但是依旧搜索不到新记录。后来不知怎的一想，不用删除索引文件，因为前面的maxid值已经改变了，直接更新增量索引不也可以么，试了一下，果然。</p>
<p>下面整个的贴一下代码。</p>
<p>1、首先是建立索引<br />
/usr/local/coreseek/bin/indexer &#8211;all &#8211;config /data/coreseek/conf/post.conf</p>
<p>2、启动守护进程<br />
/usr/local/coreseek/bin/searchd &#8211;config /data/coreseek/conf/post.conf</p>
<p>3、+记录</p>
<p>4、更新增量索引，这个写在脚本里，因为需要每分钟更新。<br />
文件名：/data/coreseek/sh/build_delta_index.sh<br />
内容：/usr/local/coreseek/bin/indexer post_delta &#8211;config /data/coreseek/conf/post.conf &#8211;rotate</p>
<p>5、合并索引，这个也要写在脚本里，每天合并一次<br />
文件名：/data/coreseek/sh/build_main_index.sh<br />
内容：/usr/local/coreseek/bin/indexer &#8211;merge post_main post_delta &#8211;rotate &#8211;config /data/coreseek/conf/post.conf  //合并索引<br />
/usr/local/mysql/bin/mysql -hhostname -uusername -ppassword -Ddbname -e &#8216;REPLACE INTO sph_counter SELECT 1, MAX(PostId) FROM Post&#8217; //更改maxid<br />
/usr/local/coreseek/bin/indexer post_delta &#8211;config /data/coreseek/conf/post.conf &#8211;rotate &gt;&gt;/var/log/coreseek/deltaindexlog //重建增量索引</p>
<p>再贴下crontab规则<br />
*/1 * * * * /bin/sh /data/coreseek/sh/build_delta_index.sh<br />
30 1 * * * /bin/sh /data/coreseek/sh/build_main_index.sh<br />
这个基本上是没有问题了，冏，要是再有问题，我真不想碰了。</p>
<p>昨天跟今天的其他时间应该是在写demo吧，= =，不想自己写页面，直接从coreseek.cn上扒下来的，居然是table，现在基本实现的功能，高亮这块还要做一下，真想说，sphinx真是个BT！搜索结果只返回id，BuildExcerpts这个用来产生文档片段的方法，我就更不说啥了。刚看文档看到UpdateAttributes，我居然还没处理，冏啊冏。</p>
<p>这两天差不多都干这些了。文档还木有写，木时间了，分词的话，只能用词库了。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.azurey.com/blog/2009/08/coreseek-index-update-mechanisms.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mysql coreseek crontab&#8230;.= =</title>
		<link>http://www.azurey.com/blog/2009/08/mysql-coreseek-crontab.html</link>
		<comments>http://www.azurey.com/blog/2009/08/mysql-coreseek-crontab.html#comments</comments>
		<pubDate>Mon, 24 Aug 2009 14:12:29 +0000</pubDate>
		<dc:creator>南晓晓</dc:creator>
				<category><![CDATA[coreseek]]></category>
		<category><![CDATA[crontab]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[增量索引]]></category>

		<guid isPermaLink="false">http://www.azurey.com/blog/2009/08/mysql-coreseek-crontab/</guid>
		<description><![CDATA[记下昨天跟今天干的活儿~昨天没写日记，都有点儿忘了。想想昨天都干了些啥捏。还是想到哪儿写到哪儿吧。

先说说今天弄coreseek分词以及建立主索引跟增量索引的情况。

上次装coreseek好像没提到安装词库。

今天依旧用的mysql数据源，不过换了个数据库，用了那个日志表，省得自己造记录。]]></description>
			<content:encoded><![CDATA[<p>记下昨天跟今天干的活儿~昨天没写日记，都有点儿忘了。想想昨天都干了些啥捏。还是想到哪儿写到哪儿吧。</p>
<p>先说说今天弄coreseek分词以及建立主索引跟增量索引的情况。</p>
<p>上次装coreseek好像没提到安装词库。</p>
<p>今天依旧用的mysql数据源，不过换了个数据库，用了那个日志表，省得自己造记录。</p>
<p>配置文件，生成的索引，log，词典，以及后面自动建立索引要用到的脚本，放的位置太乱了，所以今天统一了一下。</p>
<p>#mkdir -p /data/coreseek</p>
<p>然后在coreseek目录下建立conf,index,log,dict,sh目录。</p>
<p>首先生成词典，就是将源码包中的文本文件，mmseg后生成词典文件uni.lib，然后在配置文件中将词典文件的路径指向这里就行了。</p>
<p>[root@localhost ~]# cd /data/coreseek/dict/</p>
<p>[root@localhost dict]# cp /opt/mmseg-3.1/data/unigram.txt /data/coreseek/dict/</p>
<p>[root@localhost dict]# /usr/local/mmseg/bin/mmseg -u unigram.txt</p>
<p>[root@localhost dict]# mv unigram.txt.uni  uni.lib</p>
<p>下面是配置文件</p>
<p>/data/coreseek/conf/post.conf</p>
<p>#<br />
# Minimal Sphinx configuration sample (clean, simple, functional)<br />
#</p>
<p>source post_main<br />
{<br />
type   = mysql</p>
<p>sql_host  = hostname<br />
sql_user  = userame<br />
sql_pass  = password<br />
sql_db   = Post<br />
sql_port  = 3306 # optional, default is 3306</p>
<p>sql_query_pre  = SET NAMES utf8<br />
sql_query_pre  = REPLACE INTO sph_counter SELECT 1, MAX(PostId) FROM Post</p>
<p>sql_query  = \<br />
SELECT PostId, UserId, PostCateId, Title, Content, UNIX_TIMESTAMP(PubTime) AS PubTime \<br />
FROM Post \<br />
WHERE PostId &lt;= (SELECT max_doc_id FROM sph_counter WHERE counter_id = 1)</p>
<p>sql_attr_uint  = UserId<br />
sql_attr_uint  = PostCateId<br />
sql_attr_timestamp = PubTime</p>
<p>}<br />
source post_delta:post_main<br />
{<br />
sql_query_pre  = SET NAMES utf8<br />
sql_query  = \<br />
SELECT PostId, UserId, PostCateId, Title, Content, UNIX_TIMESTAMP(PubTime) AS PubTime \<br />
FROM Post \<br />
WHERE PostId &gt; (SELECT max_doc_id FROM sph_counter WHERE counter_id = 1)<br />
}</p>
<p>index post_main<br />
{<br />
source     = post_main<br />
path     = /data/coreseek/index/post_main<br />
docinfo     = extern<br />
charset_type    = zh_cn.utf-8<br />
charset_dictpath   = /data/coreseek/dict<br />
}</p>
<p>index post_delta:post_main<br />
{<br />
source     = post_delta<br />
path     = /data/coreseek/index/post_delta<br />
}</p>
<p>indexer<br />
{<br />
mem_limit    = 32M<br />
}</p>
<p>searchd<br />
{<br />
log     = /data/coreseek/log/searchd.log<br />
query_log    = /data/coreseek/log/query.log<br />
read_timeout    = 5<br />
max_children    = 30<br />
pid_file    = /data/coreseek/log/searchd.pid<br />
max_matches    = 1000<br />
seamless_rotate    = 1<br />
preopen_indexes    = 0<br />
unlink_old    = 1<br />
}</p>
<p>建立索引，说下索引建立与更新机制吧。增量索引定时更新，比如我这里是1分钟建立一次，查询的时候，同时从两个索引中查询。然后凌晨的时候重建一次索引，所有记录会被添加到主索引，增量索引也会被清空v，这个可以看我后面的测试用例。【刚刚龙兄问我为什么不是合并，后来我想也是，用到这个的，一般数据量不会小，合并索引相对重建更高效一些，不过合并的话，增量索引是如何处理的呢？这个，明天再来解决。】</p>
<p>#/usr/local/coreseek/bin/indexer &#8211;config /data/coreseek/conf/post.conf &#8211;all</p>
<p>#/usr/local/coreseek/bin/searchd &#8211;config /data/coreseek/conf/post.conf</p>
<p>#/usr/local/coreseek/bin/search -q &#8211;config /data/coreseek/conf/post.conf</p>
<p>上面这个可以查看到索引，嘿嘿，这是神仙告诉我的。</p>
<p>在这里我还碰到了一个问题，cannot open /data/coreseek/dict/mmseg.ini<br />
解决办法<br />
vi /data/coreseek/dict/mmseg.ini，输入下面内容<br />
[mmseg]<br />
merge_number_and_ascii=1;<br />
number_and_ascii_joint=-;<br />
compress_space=0;<br />
seperate_number_ascii=1;</p>
<p>以上解释如下</p>
<p>/*<br />
merge_number_and_ascii: 字母和数字连续出现是非切分<br />
number_and_ascii_joint:连接数字和字母可用的符号，如&#8217;-&#8217; &#8216;.&#8217; 等<br />
compress_space：暂时无效<br />
seperate_number_ascii：是否拆分数字，如 1988 -&gt; 1/x 9/x 8/x 8/x<br />
*/</p>
<p>这个在网上随处可见，但是，很多人是开启守护进程searchd出现问题，我倒是在search时出现了问题。</p>
<p>下面写更新索引的脚本，先是增量索引:</p>
<p>#vi /data/coreseek/sh/build_delta_index.sh</p>
<p>#!/bin/sh<br />
/usr/local/coreseek/bin/indexer post_delta &#8211;config /data/coreseek/conf/post.conf &#8211;rotate &gt;&gt; /var/log/coreseek/deltaindexlog</p>
<p>更新增量索引，加上&#8211;rotate，不用停止守护进程更新索引。</p>
<p>更新索引:</p>
<p>#!/bin/sh<br />
/usr/local/coreseek/bin/indexer &#8211;rotate &#8211;all &#8211;config /data/coreseek/conf/post.conf &gt;&gt; /var/log/coreseek/mainindexlog</p>
<p>下面建立crontab规则定时更新索引。</p>
<p>#service crond start</p>
<p>#crontab -e</p>
<p>*/1 * * * * /bin/sh /data/coreseek/sh/build_delta_index.sh &gt; /dev/null<br />
0 0 * * * /bin/sh /data/coreseek/sh/build_main_index.sh &gt; /dev/null</p>
<p>下面是简单的测试用例，用了api</p>
<p>&lt;?php<br />
header(&#8220;Content-type:text/html;charset=utf-8&#8243;);<br />
include &#8217;sphinxapi.php&#8217;;<br />
$s = new SphinxClient();<br />
$s-&gt;SetServer(&#8216;localhost&#8217;, 3312);<br />
$r = $s-&gt;Query(&#8216;日记&#8217;,'post_main, post_delta&#8217;);<br />
echo &#8216;&lt;pre&gt;&#8217;;<br />
if($r)<br />
print_r($r);<br />
else<br />
echo $s-&gt;GetLastError();</p>
<p>?&gt;</p>
<p>在浏览器中打开，显示查询到的数据。然后添加记录，记录中包括“日记”，一分钟之内，将会看到增加的记录。</p>
<p>说说昨天跟今天，让我有些无奈的两件事吧。</p>
<p>昨天的测试用例，加入中文后，中文依旧没有搜索出来，今天用search -q查看，也只有四条索引，建立索引时明明看到 6 docs，后来在看配置文件时发现，sql_query_pre=utf8，前面的注释没有去掉。粗心啊粗心。</p>
<p>今天的crontab更是让我崩溃啊，开始service crond start木有此服务，问了好几个师傅都木有答案，后来问了系统GG，yum -y install vixie-cron，安装好了，后来写好规则，几分钟过去了，增量索引却死活不见更新，俺找了很多原因，一一排除，最后想想，难道是服务没开？service crond start。。。成功，无语啊无语，面壁去。</p>
<p>再说个事儿，今天在公司，secureCRT死活不能输入中文，我明明记得在家可以输入的，相关配置也应该基本一致，可就是不行。后来神仙师傅让我试试智能ABC行不行，居然可以，万恶的万能五笔，继续无语。</p>
<p>===========================华丽的分割线=======================</p>
<p>昨天主要是在虚拟机下折腾mysql吧。</p>
<p>因为折腾coreseek的全文检索测试中文，原有的数据是木有中文的，后来就想直接数据库里插入数据，= =不过命令行MS对中文支持不是很好，后来就想还是通过navicat来操作吧。</p>
<p>连接，填入主机名，用户名，密码，确定。</p>
<p>Host **** is not allowed to connect to this MySQL server</p>
<p>google之，原来是root不支持远程登录。</p>
<p>于是在虚拟机下进入mysql，添加帐户</p>
<p>grant all on *.* to &#8216;erika&#8217;@'%&#8217; identified by password</p>
<p>重新用navicat连接，成功。</p>
<p>打开表，直接加一行中文记录，刷新，中文全变成了???</p>
<p>查看表信息，居然是latin1，应该是建表时木有指定编码造成的。</p>
<p>改编码：</p>
<p>mysql&gt; alter table documents charset=utf8;</p>
<p>再加入中文记录，正常显示。</p>
<p>后来想想不能每次建表都这么指定编码吧，= =，可是虚拟机上的mysql居然是木有my.cnf的。这问题昨晚木有解决。今天早上幸亏炽天使童鞋帮忙，终于解决鸟。</p>
<p>#cp /usr/local/mysql/share/mysql/my-medium.cnf /etc/my.cnf</p>
<p>#vi /etc/my.cnf</p>
<p>在[client]跟[mysqld]下分别加上default-character-set=utf8</p>
<p>重启mysql</p>
<p>#/usr/local/mysql/bin/mysqladmin -uuser -ppassword shutdown</p>
<p>#/usr/local/mysql/bin/mysqld_safe &amp;</p>
<p>这下好了，不要每次都要指定编码了。</p>
<p>为嘛每次写就写了这么点，做起来总是耗费很多时间捏，这是一个问题。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.azurey.com/blog/2009/08/mysql-coreseek-crontab.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>coreseek3.1安装</title>
		<link>http://www.azurey.com/blog/2009/08/coreseek3-1-install.html</link>
		<comments>http://www.azurey.com/blog/2009/08/coreseek3-1-install.html#comments</comments>
		<pubDate>Thu, 20 Aug 2009 14:02:03 +0000</pubDate>
		<dc:creator>南晓晓</dc:creator>
				<category><![CDATA[coreseek]]></category>
		<category><![CDATA[sphinx]]></category>
		<category><![CDATA[全文检索]]></category>

		<guid isPermaLink="false">http://www.azurey.com/blog/2009/08/coreseek3-1%e5%ae%89%e8%a3%85/</guid>
		<description><![CDATA[Coreseek 全文检索服务器2.0 是在Sphinx基础上开发的全文检索软件，按照GPLv2协议发行。

上面是手册上的话，说到底，coreseek就是支持中文分词的sphinx吧，= =个人理解。]]></description>
			<content:encoded><![CDATA[<p>Coreseek 全文检索服务器2.0 是在Sphinx基础上开发的全文检索软件，按照GPLv2协议发行。</p>
<p>上面是手册上的话，说到底，coreseek就是支持中文分词的sphinx吧，= =个人理解。</p>
<p>= =今天折腾一天这东西，也只能才算是安装好。</p>
<p>先说下环境</p>
<p>centos5.2</p>
<p>php5.2.6+mysql5.0.67+nginx/0.7.14</p>
<p>安装目录分别是/usr/local/php,/usr/local/mysql,/usr/local/nginx</p>
<p>下面说说安装coreseek</p>
<p><a title="csft-3.1.tar.gz" href="http://www.coreseek.cn/uploads/csft/3.1/Source/csft-3.1.tar.gz" target="_blank"></a></p>
<p>手册：<a title="sphinx_doc_zhcn_0.9.pdf" href="http://www.coreseek.cn/uploads/pdf/sphinx_doc_zhcn_0.9.pdf" target="_blank">sphinx_doc_zhcn_0.9.pdf</a></p>
<p>使用的是源码安装</p>
<p>下载安装mmseg</p>
<p>再抄一段手册的话介绍一下mmseg吧</p>
<p>LibMMSeg 是Coreseek.com为 Sphinx 全文搜索引擎设计的中文分词软件包，其在GPL协议下发行的中文分词法，采用Chih-Hao Tsai的MMSEG算法。</p>
<p>LibMMSeg 采用C++开发，同时支持Linux平台和Windows平台，切分速度大约在300K/s（PM-1.2G）。</p>
<p>[root@localhost ~]#cd /opt</p>
<p>[root@localhost opt]#wget <a href="http://www.coreseek.cn/uploads/csft/3.1/Source/mmseg-3.1.tar.gz">http://www.coreseek.cn/uploads/csft/3.1/Source/mmseg-3.1.tar.gz</a></p>
<p>[root@localhost opt]# tar zxvf mmseg-3.1.tar.gz</p>
<p>[root@localhost opt]#cd mmseg-3.1</p>
<p>[root@localhost mmseg-3.1]#./configure &#8211;with-prefix=/usr/local/mmseg</p>
<p>[root@localhost mmseg-3.1]#make &amp;&amp; make install &amp;&amp; make clean</p>
<p>[root@localhost mmseg-3.1]#cd ../</p>
<p>看别人的安装过程有些出问题了，还好我的没出问题。嘎嘎</p>
<p>下载安装Coreseek Fulltext Server(csft)</p>
<p>因为木用过python，所以木有考虑用python做数据源，自然也木有安装。</p>
<p>[root@localhost opt]#wget <a href="http://www.coreseek.cn/uploads/csft/3.1/Source/csft-3.1.tar.gz">http://www.coreseek.cn/uploads/csft/3.1/Source/csft-3.1.tar.gz</a></p>
<p>[root@localhost opt]# tar zxvf csft-3.1.tar.gz</p>
<p>[root@localhost opt]# cd csft-3.1</p>
<p>[root@localhost csft-3.1]#./configure &#8211;prefix=/usr/local/coreseek &#8211;with-mysql &#8211;with-mmseg=/usr/local/mmseg &#8211;with-mmseg-includes=/usr/local/mmseg/include/mmseg &#8211;with-mmseg-libs=/usr/local/mmseg/lib/</p>
<p>这个是我的配置，在别人那看到的是木有&#8211;with-mmseg=/usr/local/mmseg的，但是我的会出问题，后来加了这句就好了，不要问为什么，因为我也不知道。</p>
<p>接下来的编译可出了不少问题，我是在coreseek.cn社区里看到有个版主的配置，跟着做了，结果就木问题了。不过他有安装python。嘎嘎。</p>
<p>原帖地址：<a href="http://www.coreseek.cn/forum/index.php?action=vthread&amp;forum=2&amp;topic=152">http://www.coreseek.cn/forum/index.php?action=vthread&amp;forum=2&amp;topic=152</a></p>
<p>=========================华丽的分割线=============================</p>
<div class="postedText">我给发我的安装过程，下面的东西是必须安装的，希望对你有帮助。<br />
yum -y install glibc glibc-devel glib2 glib2-devel<br />
yum install -y expat expat-devel<br />
yum install -y python-devel MySQL-python</p>
<p>安装mmseg:<br />
tar zxf mmseg3_0b3.tar.gz<br />
cd mmseg3_0b3<br />
./configure<br />
make &amp;&amp; make install &amp;&amp; make clean<br />
cd ../</p>
<p>安装libiconv<br />
tar zxf libiconv-1.12.tar.gz<br />
cd libiconv-1.12<br />
./configure &#8211;prefix=/usr/local<br />
make &amp;&amp; make install &amp;&amp; make clean<br />
echo /usr/local/lib/ &gt;&gt; /etc/ld.so.conf<br />
ldconfig<br />
cd ../</p>
<p>安装csft<br />
tar zxvf csft3.1b3.tar.gz<br />
cd csft3.1b3<br />
./configure &#8211;prefix=/usr/local/coreseek &#8211;with-mysql=/usr/local/mysql &#8211;with-mmseg-includes=/usr/local/include/mmseg &#8211;with-mmseg-libs=/usr/local/lib &#8211;with-python &#8211;enable-id64 &#8211;with-iconv</p>
<p>vi Makefile<br />
LIBS = -lm -lexpat -L/usr/local/lib<br />
里面去，变成这样:<br />
LIBS = -lm -lexpat -L/usr/local/lib -liconv<br />
vi src/Makefile<br />
LIBS = -lm -lexpat -L/usr/local/lib<br />
里面去，变成这样:<br />
LIBS = -lm -lexpat -L/usr/local/lib -liconv</p>
<p>make<br />
make install<br />
make clean</p>
</div>
<div class="postedText">===============================分割完成=========================</div>
<div class="postedText">照着这位版主的方法，就算是装好鸟。</div>
<div class="postedText">如果中途编译出现错误，要make clean一下再make，嘎嘎，不然好不了的。</div>
<div class="postedText">接下来就照着手册的第2.5章来写配置文件了</div>
<div class="postedText">$ cd /usr/local/coreseek/etc<br />
$ cp sphinx.conf.dist sphinx.conf<br />
$ vi sphinx.conf</div>
<div class="postedText">话说这里的一些mysql数据要自己填的，其实俺做的这步的时候，数据库还是空的。嘎嘎。</div>
<div class="postedText">先给coreseek也可以说是sphinx创建个专门的帐号吧。</div>
<div class="postedText">进入mysql，这里用的是root帐号登录的</div>
<div class="postedText">mysql&gt;grant all on test.* to <a href="mailto:sphinx@localhost">sphinx@localhost</a> identified by sphinx</div>
<div class="postedText">用户名跟密码都设成sphinx了。</div>
<div class="postedText">然后退出mysql</div>
<div class="postedText">$ mysql -usphinx -p test &lt; /usr/local/sphinx/etc/example.sql</div>
<div class="postedText">回车后填入密码就导入好了。</div>
<div class="postedText">当然这个是理想状态，嘎嘎，俺就碰到了好些问题，比如can&#8217;t create table，依稀记得错误信息是这个，= =，最后发现是权限问题，后来是神仙帮忙的，这里不得不提到我的师傅神仙了，他好厉害= =，非常厉害，相当厉害。。。</div>
<div class="postedText"># cd /usr/local/mysql/var   这个就是存放数据库文件的地方，不知道在哪里的话，可以看my.cnf里的datadir。</div>
<div class="postedText"># chown -R 755 mysql.mysql test 这个test就是存放test数据库的地方了。</div>
<div class="postedText">数据导进去，再回到配置文件sphinx.conf</div>
<div class="postedText">先是数据源</div>
<div class="postedText">sql_host                                = localhost<br />
sql_user                                = sphinx<br />
sql_pass                               = sphinx<br />
sql_db                                  = test<br />
sql_port                                = 3306</div>
<div class="postedText">上面要改成自己的</div>
<div class="postedText">sql_query_pre                  = SET NAMES utf8</div>
<div class="postedText">这句前面的注释去掉</div>
<div class="postedText">charset_type            = utf-8</div>
<div class="postedText">这里原来是sbcs的，改成utf-8，说中文的可以改成zh_cn.utf-8，我试了一下不行。</div>
<div class="postedText"># &#8216;utf-8&#8242; default value is</div>
<div class="postedText">charset_table          = 0..9, A..Z-&gt;a..z, _, a..z, U+410..U+42F-&gt;U+430..U+44F, U+430..U+44F</div>
<div class="postedText">charset_table前的注释去掉。</div>
<div class="postedText">例子中的配置文件大概就是这样的吧</div>
<div class="postedText">下面建立索引</div>
<div class="postedText">#cd /usr/local/coreseek/etc</div>
<div class="postedText">#/usr/local/coreseek/bin/indexer &#8211;config /usr/local/coreseek/etc/sphinx.conf &#8211;all</div>
<div class="postedText">哈哈，又出错了。。</div>
<div class="postedText">/usr/local/coreseek/bin/indexer: error while loading shared libraries: libmysqlclient.so.15: cannot open shared object file: No such file or directory<br />
在网上看到解决方法</div>
<div class="postedText">在 /etc/ld.so.conf文件中加入您 MySQL 相关的库文件所在文件夹：<br />
echo &#8220;/usr/local/mysql/lib/mysql&#8221; &gt;&gt;/etc/ld.so.conf<br />
然后运行 ldconfig 命令即可。</div>
<div class="postedText">原因是找不着那个啥文件，= =。我是直接用vi打开/etc/ld.so.conf在最后加上一句/usr/local/mysql5/lib/mysql，其实是一样的，不过我对linux其实不大熟，所以就当是锻炼了。。= =</div>
<div class="postedText">那句命令要记得运行，不然还是会出错的。</div>
<div class="postedText">这下好了吧</div>
<div class="postedText">然后开守护进程</div>
<div class="postedText">[root@localhost etc]# #/usr/local/coreseek/bin/searchd</div>
<div class="postedText">又出问题了。。</div>
<div class="postedText">FATAL: no readable config file (looked in /usr/local/coreseek/etc/csft.conf, ./csft.conf).</div>
<div class="postedText">真讨厌啊，还要指定配置文件的</div>
<div class="postedText">[root@localhost etc]# ../bin/searchd &#8211;config /usr/local/coreseek/etc/sphinx.conf</div>
<div class="postedText">运行api自带的test.php</div>
<div class="postedText">[root@localhost etc]# cd cd /opt/csft-3.1/api</div>
<div class="postedText">[root@localhost api]# /usr/local/php/bin/php test.php test</div>
<div class="postedText">Query &#8216;test &#8216; retrieved 3 of 3 matches in 0.000 sec.<br />
Query stats:<br />
&#8216;test&#8217; found 10 times in 6 documents</div>
<div class="postedText">Matches:<br />
1. doc_id=1, weight=101, group_id=1, date_added=2009-08-20 13:28:32<br />
2. doc_id=2, weight=101, group_id=1, date_added=2009-08-20 13:28:32<br />
3. doc_id=4, weight=1, group_id=2, date_added=2009-08-20 13:28:32</div>
<div class="postedText">嘎嘎，结果出来了。。</div>
<div class="postedText">今天就做了这些工作。</div>
<div class="postedText">未完待续。。</div>
]]></content:encoded>
			<wfw:commentRss>http://www.azurey.com/blog/2009/08/coreseek3-1-install.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

