osqa java_从LSM-Tree、COLA-Tree谈到StackOverflow、OSQA(召唤前端)
2.4、OSQA內(nèi)Sphinx配置文件
接下來為我們的問題搜索寫sphinx配置文件,我的配置文件如下:#源定義
source base_source
{
type = mysql
sql_host = localhost
sql_user = root
sql_pass = root
sql_db = osqa
sql_port = 3306
sql_query_pre = SET NAMES utf8
sql_query_pre = SET SESSION query_cache_type=OFF
sql_query_info_pre = SET NAMES utf8
sql_range_step = 1000
sql_query =
}
#index定義
index base_index
{
path=
source = base_source #對應的source名稱
docinfo = extern
mlock = 0
morphology = none
min_word_len = 1
html_strip = 0
#中文分詞配置,詳情請查看:http://www.coreseek.cn/products-install/coreseek_mmseg/
charset_dictpath = /usr/local/mmseg3/etc/ #BSD、Linux環(huán)境下設置,/符號結(jié)尾
#charset_dictpath = etc/ #Windows環(huán)境下設置,/符號結(jié)尾,最好給出絕對路徑,例如:C:/usr/local/coreseek/etc/...
charset_type = zh_cn.utf-8
ngram_len = 0
}
source search_question_source: base_source
{
sql_query_range = select min(id),max(id) from forum_node
sql_query = SELECT question.id, question.title, author.username, question.tagnames, question.body,\
GROUP_CONCAT(answer.body) as answer_bodies FROM forum_node AS question, forum_node AS answer,\
auth_user AS author WHERE answer.parent_id = question.id AND question.author_id = author.id \
And question.id >= $start and question.id < $end GROUP BY question.id
# sql_attr_uint = group_id #從SQL讀取到的值必須為整數(shù),we should add the number of answer
# and update date to rank these questions
# sql_attr_timestamp = date_added #從SQL讀取到的值必須為整數(shù),作為時間屬性
}
source delta_search_question_source: search_question_source
{
sql_query_range = select min(id),max(id) from forum_node where added_at > DATE_FORMAT(NOW(),'%Y-%m-%d')
}
index search_question_index : base_index
{
source= search_question_source
path= /ROOT/sphinx/index/search_question
}
index delta_search_question_index : search_question_index
{
source= delta_search_question_source
path= /ROOT/sphinx/index/delta_search_question
}
#全局index定義
indexer
{
mem_limit = 128M
}
#searchd服務定義
searchd
{
listen = 9312
read_timeout = 5
max_children = 30
max_matches = 1000
seamless_rotate = 0
preopen_indexes = 0
unlink_old = 1
pid_file = /ROOT/sphinx/log/searchd_osqa.pid #請修改為實際使用的絕對路徑,例如:/usr/local/coreseek/var/...
log = /ROOT/sphinx/log/searchd_osqa.log #請修改為實際使用的絕對路徑,例如:/usr/local/coreseek/var/...
query_log = /ROOT/sphinx/log/query_osqa.log #請修改為實際使用的絕對路徑,例如:/usr/local/coreseek/var/...
可以放在任何文件夾下?只要建索引的時候指定就好。比如我的是放在/ROOT/sphinx/conf/sphinx_osqa.conf,接下來建索引: indexer ?-c /ROOT/sphinx/conf/sphinx_osqa.conf ?--all –rotate
Base_index的警告可以忽略,然后啟動守護進程?searchd–c?/ROOT/sphinx/conf/sphinx_osqa.conf
到此,sphinx的服務端都已經(jīng)弄好,守護進程searchd在9312端口等待客戶端發(fā)query??梢院唵螠y試一下?search–c?/ROOT/sphinx/conf/sphinx_osqa.conf?keywords。
2.5、Sphinx服務端配置的幾個問題
Sphinx服務端配置已經(jīng)完成,雖然自從diable掉mysqlfulltext之后就可以搜到問題,但是用的是Like?%keyword%形式的請求。我們現(xiàn)在需要改的有三處:
在/forum/models/question.py
在Question類加入search = SphinxSearch(
index ='search_question_index',
mode='SPH_MATCH_ALL',
),自己根據(jù)需求配置,比如設置權(quán)重之類的。
加入sphinxsearch引用from?djangosphinx.models?import?SphinxSearch
QuestionManager類加入queryset?=?Question.search.query(keywords)
將命中的id取出來存成list結(jié)構(gòu),比如,存到變量ids里,然后直接返回
return?False,self.filter(id__in=ids)
這樣就返回了命中的id的所有問題。當然這種in的方式如果ids的數(shù)據(jù)量小的時候還可以,大了之后也不行,所以,后續(xù)應該考慮分頁的方式來呈現(xiàn)更多的結(jié)果。
當然,最終能在服務器端上看到已經(jīng)有收到請求了,如下圖所示:
至此,之前搜到不到關(guān)鍵詞/tag的問題成功解決。也就是說,咱們的StackOverflow的原型OSQA已經(jīng)搭建完成,接下來,便是一系列修改完善優(yōu)化的工作。最后,可以在5月底之前正式上線,不出所料的話。歡迎有興趣者加入,謝謝。
參考文獻及相關(guān)鏈接
后記
從4月6日和幾個朋友正式啟動以來,到如今已快一月,盡管我們存在著很多的缺陷,業(yè)余時間完成+平均畢業(yè)一年+異地協(xié)調(diào)作戰(zhàn),但一切不足以成為阻礙我們的借口。感謝我的團隊/朋友們的支持,特別是菠蘿,chx/@,銀河系,Damon及志偉。他們給了我足夠多的支持和幫助。
非常歡迎在京的有意者加入我們:
熟練or精通前端開發(fā)(js/css/html,或熟悉jquery/ajax);
后端(熟練linux/python,或熟悉django框架或進行過web py開發(fā)),或有做過大型網(wǎng)站經(jīng)驗的;
上手快,快速自學/開發(fā)能力強,業(yè)余時間充足,做事專注且有毅力。? ?有意且具備以上任何一項技能,在京的業(yè)余時間充足且想做點事情的,歡迎隨時加入我們(加入的唯一條件則是:在本地獨自成功搭建OSQA),以造益天下更多人。我的聯(lián)系方式如下:1、微博@博主July,http://weibo.com/julyweibo;2、郵箱:zhoulei0907@yahoo.cn。
OK,本文或本blog內(nèi)任何文章有任何問題,歡迎隨時不吝賜教/指正。謝謝,完。
總結(jié)
以上是生活随笔為你收集整理的osqa java_从LSM-Tree、COLA-Tree谈到StackOverflow、OSQA(召唤前端)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java实现二树杈_HashSet的ha
- 下一篇: java 正则 子字符串_使用Java正