django中的全文檢索

全文檢索

  • 全文檢索不同于特定字段的模糊查詢(xún),使用全文檢索的效率更高皮官,并且能夠?qū)τ谥形倪M(jìn)行分詞處理
  • haystack:django的一個(gè)包,可以方便地對(duì)model里面的內(nèi)容進(jìn)行索引实辑、搜索捺氢,設(shè)計(jì)為支持
  • whoosh,solr,Xapian,Elasticsearc四種全文檢索引擎后端,屬于一種全文檢索的框架
  • whoosh:純Python編寫(xiě)的全文搜索引擎徙菠,雖然性能比不上sphinx讯沈、xapian郁岩、Elasticsearc等婿奔,但是無(wú)二進(jìn)制包,程序不會(huì)莫名其妙的崩潰问慎,對(duì)于小型的站點(diǎn)萍摊,whoosh已經(jīng)足夠使用
  • jieba:一款免費(fèi)的中文分詞包,如果覺(jué)得不好用可以使用一些收費(fèi)產(chǎn)品

操作

1.在虛擬環(huán)境中依次安裝包

pip install django-haystack
pip install whoosh
pip install jieba ```

2.修改settings.py文件

添加應(yīng)用
INSTALLED_APPS = (
...
'haystack',
)

添加搜索引擎
HAYSTACK_CONNECTIONS = {
'default': {
'ENGINE': 'haystack.backends.whoosh_cn_backend.WhooshEngine',
'PATH': os.path.join(BASE_DIR, 'whoosh_index'),
}
}

自動(dòng)生成索引

HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor'

3.在項(xiàng)目的urls.py中添加url

urlpatterns = [
...
url(r'^search/', include('haystack.urls')),
]

4.在應(yīng)用目錄下建立search_indexes.py文件

coding=utf-8

from haystack import indexes
from models import GoodsInfo

class GoodsInfoIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)

def get_model(self):
    return GoodsInfo

def index_queryset(self, using=None):
    return self.get_model().objects.all()

5.在目錄“templates/search/indexes/應(yīng)用名稱(chēng)/”下創(chuàng)建“模型類(lèi)名稱(chēng)_text.txt”文件

goodsinfo_text.txt如叼,這里列出了要對(duì)哪些列的內(nèi)容進(jìn)行檢索

{{ object.gName }}
{{ object.gSubName }}
{{ object.gDes }}
6.在目錄“templates/search/”下建立search.html

<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
{% if query %}
<h3>搜索結(jié)果如下:</h3>
{% for result in page.object_list %}
<a href="/{{ result.object.id }}/">{{ result.object.gName }}</a>

{% empty %}
<p>啥也沒(méi)找到</p>
{% endfor %}

{% if page.has_previous or page.has_next %}
    <div>
        {% if page.has_previous %}<a href="?q={{ query }}&amp;page={{ page.previous_page_number }}">{% endif %}&laquo; 上一頁(yè){% if page.has_previous %}</a>{% endif %}
    |
        {% if page.has_next %}<a href="?q={{ query }}&amp;page={{ page.next_page_number }}">{% endif %}下一頁(yè) &raquo;{% if page.has_next %}</a>{% endif %}
    </div>
{% endif %}

{% endif %}
</body>
</html>
7.建立ChineseAnalyzer.py文件

保存在haystack的安裝文件夾下冰木,路徑如“/home/python/.virtualenvs/django_py2/lib/python2.7/site-packages/haystack/backends”
import jieba
from whoosh.analysis import Tokenizer, Token

class ChineseTokenizer(Tokenizer):
def call(self, value, positions=False, chars=False,
keeporiginal=False, removestops=True,
start_pos=0, start_char=0, mode='', **kwargs):
t = Token(positions, chars, removestops=removestops, mode=mode,
**kwargs)
seglist = jieba.cut(value, cut_all=True)
for w in seglist:
t.original = t.text = w
t.boost = 1.0
if positions:
t.pos = start_pos + value.find(w)
if chars:
t.startchar = start_char + value.find(w)
t.endchar = start_char + value.find(w) + len(w)
yield t

def ChineseAnalyzer():
return ChineseTokenizer()
8.復(fù)制whoosh_backend.py文件,改名為whoosh_cn_backend.py

注意:復(fù)制出來(lái)的文件名笼恰,末尾會(huì)有一個(gè)空格踊沸,記得要?jiǎng)h除這個(gè)空格
from .ChineseAnalyzer import ChineseAnalyzer
查找
analyzer=StemmingAnalyzer()
改為
analyzer=ChineseAnalyzer()
9.生成索引

初始化索引數(shù)據(jù)
python manage.py rebuild_index

注意是templates/search/indexes/應(yīng)用 目錄下
![捕獲.PNG](http://upload-images.jianshu.io/upload_images/2257864-c1baf7d1af29b358.PNG?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

get方式查詢(xún)
http://127.0.0.1:8000/search/?q=參數(shù)&page=1


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市社证,隨后出現(xiàn)的幾起案子逼龟,更是在濱河造成了極大的恐慌,老刑警劉巖追葡,帶你破解...
    沈念sama閱讀 218,451評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件腺律,死亡現(xiàn)場(chǎng)離奇詭異奕短,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)匀钧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)翎碑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人之斯,你說(shuō)我怎么就攤上這事日杈。” “怎么了佑刷?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,782評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵达椰,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我项乒,道長(zhǎng)啰劲,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,709評(píng)論 1 294
  • 正文 為了忘掉前任檀何,我火速辦了婚禮蝇裤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘频鉴。我一直安慰自己栓辜,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布垛孔。 她就那樣靜靜地躺著藕甩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪周荐。 梳的紋絲不亂的頭發(fā)上狭莱,一...
    開(kāi)封第一講書(shū)人閱讀 51,578評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音概作,去河邊找鬼腋妙。 笑死,一個(gè)胖子當(dāng)著我的面吹牛讯榕,可吹牛的內(nèi)容都是我干的骤素。 我是一名探鬼主播,決...
    沈念sama閱讀 40,320評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼愚屁,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼济竹!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起霎槐,我...
    開(kāi)封第一講書(shū)人閱讀 39,241評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤送浊,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后栽燕,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體罕袋,經(jīng)...
    沈念sama閱讀 45,686評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡改淑,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了浴讯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片朵夏。...
    茶點(diǎn)故事閱讀 39,992評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖榆纽,靈堂內(nèi)的尸體忽然破棺而出仰猖,到底是詐尸還是另有隱情,我是刑警寧澤奈籽,帶...
    沈念sama閱讀 35,715評(píng)論 5 346
  • 正文 年R本政府宣布饥侵,位于F島的核電站,受9級(jí)特大地震影響衣屏,放射性物質(zhì)發(fā)生泄漏躏升。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評(píng)論 3 330
  • 文/蒙蒙 一狼忱、第九天 我趴在偏房一處隱蔽的房頂上張望膨疏。 院中可真熱鬧,春花似錦钻弄、人聲如沸佃却。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,912評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)饲帅。三九已至,卻和暖如春瘤泪,著一層夾襖步出監(jiān)牢的瞬間灶泵,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,040評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工均芽, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留丘逸,地道東北人单鹿。 一個(gè)月前我還...
    沈念sama閱讀 48,173評(píng)論 3 370
  • 正文 我出身青樓掀宋,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親仲锄。 傳聞我的和親對(duì)象是個(gè)殘疾皇子劲妙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 目錄結(jié)構(gòu):1.全文檢索 2.Lucene入門(mén)3.Lucene進(jìn)階 全文檢索 一, 生活中的搜索:1.Win...
    CoderZS閱讀 1,681評(píng)論 0 12
  • Solr&ElasticSearch原理及應(yīng)用 一、綜述 搜索 http://baike.baidu.com/it...
    樓外樓V閱讀 7,293評(píng)論 1 17
  • 在項(xiàng)目中如果要實(shí)現(xiàn)全文檢索儒喊,最普通的方法就是通過(guò)數(shù)據(jù)庫(kù)查詢(xún)語(yǔ)句like '%keywords%'镣奋,但是這種方法在數(shù)...
    xsg閱讀 7,814評(píng)論 2 2
  • 現(xiàn)狀: Sphinx 目前的穩(wěn)定版本為 2.2.11.Sphinx 目前對(duì)英文等字母語(yǔ)言采用空格分詞,故其對(duì)中文分...
    _Lyux閱讀 1,195評(píng)論 0 3
  • Sphinx+MySQL5.1x+SphinxSE+mmseg中文分詞 搜索引擎架構(gòu)搭建手記 什么是Sphinx ...
    九九九玖閱讀 1,598評(píng)論 1 11