設置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 國際許可協議進行許可。簡而言之,可隨意轉發轉載,轉載請注明出處。


留点评论吧: