设置Manticoresearch搞定Hugo站点的搜索引擎以及口舌关

2018-11-11 约 2019 字 预计阅读 5 分钟

这几天玩Hugo和git觉得像回到大学时代刚学汇编语言的状态。也是一种反璞归真。

Opensource真是含有巨大的宝库,这种集体的力量逐步演化下去,会对世界人民日后带来更深远的影响。

站在git、hugo、manticoresearch等众多大神的肩膀上,每样都会点皮毛的我,自觉也进入了业余IT Man的0.5版本。两个礼拜前玩Wordpress的时候,最多是业余IT Man的0.1。 :)

闲话表过,今天就将昨天设置搜索引擎的经验帖到这里供大家参考。


用hugo生成manticoresearch能够阅读的XML文件

manticoresearch是一款支持全文搜索的开源软件,名头还不是很响,是名气响亮一点的sphinxsearch的分支项目,我是无意中搜到,就试试看,前面也写了一些教程,在此处可以看到,以前写过的就不重复了,请观看老帖。

友情提示

manticore的教程跟sphinx是通用的,如果用sphinx来做搜索引擎,设置是一样的。

前面用wordpress的时候,用的是MySQL数据库与其接口。现在用hugo生成的站点全是html文本文件,没有任何数据库,只能用xml来与之相连了。

hugo可以自定义生成的文件,在config.toml文件帖上下列设置:

[outputFormats]
[outputFormats.sphinx]
baseName = "sphinx"
isPlainText = true
mediaType = "application/xml"
path = "/"
[outputs]
home = [ "HTML", "RSS", "sphinx" ]

然后到你hugo站点layout目录下子目录_default下建立一个文件名为list.sphinx.xml,注意文件名全部为小写,我之前大写了一个字母,怎么也没生成出来。

编辑此文件,上书:

list.sphinx.xml

<?xml version="1.0" encoding="utf-8"?>
<sphinx:docset>
<sphinx:schema>
<sphinx:field name="title"/>
<sphinx:attr name="title" type="string"/>
<sphinx:attr name="link" type="string"/>
<sphinx:field name="content"/>
<sphinx:attr name="content" type="string"/>
<sphinx:attr name="pubDate" type="timestamp"/>

</sphinx:schema>
{{ range $i, $e:= .Pages }}
<sphinx:document id="{{ add $i 1080 }} ">
<title><![CDATA[{{ .Title }}]]></title>
<link><![CDATA[{{ .Permalink }}]]></link>
<pubDate>{{ (time ( .Date)).Unix }}</pubDate>
<content><![CDATA[{{ .Plain }}]]></content>
</sphinx:document>
{{ end }}

</sphinx:docset>

用hugo命令生成站点,就能在根目录找到一个sphinx.xml文件。

设置manticoresearch的conf索引sphinx.xml

用老的sphinx.conf文件也可,新建一个也可,内容如下:

sphinx.conf

source srchugo
{
type = xmlpipe2
xmlpipe_command = /bin/cat ~/public/sphinx.xml
xmlpipe_fixup_utf8 = 1
xmlpipe_attr_string = link
xmlpipe_attr_timestamp = pubDate
xmlpipe_field_string = title
xmlpipe_field_string = content

}

index hugo
{
source = srchugo
path = /var/lib/manticore/data/hugo
docinfo = extern
mlock = 0
min_word_len = 1
charset_type = utf-8
charset_table = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F
ngram_len = 1
ngram_chars = U+3000..U+2FA1F
html_strip = 1
html_index_attrs = img=alt,title; a=title;
html_remove_elements = style, script, object, embed, span
}

indexer
{
mem_limit = 256M

}
searchd
{
listen = 9312
listen = 9306:mysql41
log = /var/log/manticore/searchd.log
query_log = /var/log/manticore/query.log
read_timeout = 5
client_timeout = 300
max_children = 30
persistent_connections_limit = 30
pid_file = /var/run/manticore/searchd.pid
seamless_rotate = 1
preopen_indexes = 1
unlink_old = 1
mva_updates_pool = 1M
max_packet_size = 8M
max_filters = 256
max_filter_values = 4096
max_batch_queries = 32
workers = threads # for RT to work
binlog_path = /var/lib/manticore/data # binlog.001 etc will be created there
}

manticoresearch的索引收录和启动测试命令在前面的帖子详细说明过,此次不再赘述。

设置git hooks每次更新帖子时自动更新索引

前面已经介绍过git hooks设置的方便功能,我现在更新网站连远程服务器都不需要进入,一个deploy脚本就全部搞定。

这就是我自认从业余IT选手0.1版大幅跳跃到0.5版的原因 :)

前贴说明的post-receive文件最后加上一句

post-receive

......
sudo indexer --config /path/sphinx.conf --all --rotate

这样只要我们用git push prd master命令,服务器端收到更新就会自动将最新的帖子索引至manticoresearch。我们的搜索功能就自动有最新帖了。无需是指计划任务来更新了。

还有一个步骤需要做,因为是在脚本里运行sudo命令,一般超级用户缺省设置是需要输入密码的。但我们在本地机运行,根本不会有输入密码的机会。

幸好这个问题早就被Opensource这个强力自动进步机制解决了。很多IT Man都有同样的需求。Linux系统设置灵活的优点也在于此。

运行

sudo visudo
到最后面写下一行
yourusername ALL=(ALL) NOPASSWD: ALL
这样你的用户名运行sudo命令就不会有口令了。


通关文之口舌关

易曰:“艮其辅,言有序。”又曰:“修辞立其诚,所以居业也。”
至圣曰:“君子欲讷於言,而敏於行。”
老祖曰:“闭其兑,塞其门,终身不勤。”
此皆教人谨言,而不可妄言也。
盖口舌者,出纳之门户,是非之根苗。
关乎人之节操,系乎人之德行。
君子小人於此分,正人邪僻於此别。
招祸致福、成事败事,无不於此而定。
故君子议之而后言。
可言方言,不可言不言。
或言而益於世道人心,或言而使人迁善改过,或言而劝人去邪归正,或言而为人方便解难,或言而为人隐恶扬善,绝不妄言、轻言、虚言,非是闭口不言,特以一言既出,驷马难追,立见祸福,言不可不慎也。
倘言有不谨,不是伤人,便自致咎。
口舌为害,其利如刀,其毒如鸩,岂小焉哉?
世间糊涂学人,不知利害,以口舌之动为小可,以利便为才能,以善辩为得意。
或形人之短,或夸己之长,或谎言诡语,或说是论非,或前言而后失信,或空言而行不速,或狂言而起祸端,或高谈而无实事,或白口咒诅,或巧言谗佞,或以言败事,或以言伤人,凡此皆有损无益之言,何贵于言?不如不言为妙。
吾劝真心学道者,速将口舌关口打通,口莫妄开,舌莫妄动,非礼勿言,言必以礼。修其辞而立其诚,谨于言而慎于行。
绝不轻于言,言必有中。
况言语者心之声,舌者心之苗。
口舌之动不正,即知心田不正。
心田不正,根本已坏,性已昧,命已摇,精神暗伤,妄想明道修道,难矣。

此关乃是沉默是金的道理。
所谓有些事是说得做不得,有些是做得说不得。个中拿捏,也是遍历遍行的资本。


author

Jesse Lau

网名遁去的一,简称遁一。2012年定居新西兰至今,自由职业者。
本文采用知识共享署名 4.0 国际许可协议进行许可。简而言之,可随意转发转载,转载请注明出处。


留点评论吧:

本网站使用cookie技术以提高用户体验度。 了解我们的隐私政策 我已了解