1,全文搜索引擎
Django提供haystack来支持全文搜索。
需要的依赖:
haystack
whoosh
jieba
使用流程:
1)下载依赖
2)配置haystack应用
3)配置搜索引擎
4)设置搜索结果的分页
HAYSTACK_SEARCH_RESULTS_PER_PAGE = 10
5)索引的设置
HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor'
6)创建索引类
需要创建一个专门的应用来放这个类,而且这个索引类所在的文件名必须是search_indexes.py
7)设置数据模板
目录和文件位置以及名字按规定来。
在文件里面,指定针对的内容
8)配置检索路由在根模块的urls
子路由不需要自己配了,因为下载的应用已经自己配好,查看的目录
C:\Users\admin\AppData\Local\Programs\Python\Python36-32\Lib\site-packages\haystack
9)创建结果展示页面,路径和名称固定
10)设定中文分词
11)生成索引
12)在需要的页面上提供搜索表单
1.下载:(django-haystack,Whoosh,jieba)
2.在settings.py中内容:
(1)添加应用:INSTALLED_APPS = [ 'haystack', ]
(2)配置搜索引擎配置:
HAYSTACK_CONNECTIONS = {
'default': {
'ENGINE': 'mysearch.whoosh_cn_backend.WhooshEngine',
# 将来需要修改
'PATH': os.path.join(BASE_DIR, 'whoosh_index'),
}
}
(3)设置分页,每页显示的条数
HAYSTACK_SEARCH_RESULTS_PER_PAGE = 2
(4) 索引配置
HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor'
# 1.子模块应用加入 INSTALLED_APPS = [ # 全文搜索 'haystack', 'mysearch', ] # 2.配置搜索引擎配置 HAYSTACK_CONNECTIONS = { 'default': { 'ENGINE': 'mysearch.whoosh_cn_backend.WhooshEngine', # 将来需要修改 'PATH': os.path.join(BASE_DIR, 'whoosh_index'), } } # 3.设置分页,每页显示的条数 HAYSTACK_SEARCH_RESULTS_PER_PAGE = 2 # 4.索引配置 HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor'
3. 创建索引类:(1)创建一个应用:python manage.py startapp mysearch
(2)然后把应用添加到settings.py中 :INSTALLED_APPS = [ 'haystack', ' mysearch' ]
(3)在mysearch子模块中创建:search_indexes.py文件,
(4)文件里面写内容如下:
# 替换模块导入位置 from myblog.models import Article from haystack import indexes class ArticleIndex(indexes.SearchIndex, indexes.Indexable): text = indexes.CharField(document=True, use_template=True) def get_model(self): return Article def index_queryset(self, using=None): return self.get_model().objects.all()
4.设置数据模板:目录和文件位置以及名字按规定来。在文件里面,指定针对的内容
(1)在项目目录下创建temp,然后依次创建py1811/mypro/temp/search/indexes/myblog/article_text.txt
myblog为子模块名字
(2)在article_text.txt中写入按照什么可以搜索到:{ { object.title }} { { object.content }}
{ { object.title }} { { object.content }}
5.配置检索路由在根模块的urls :
urlpatterns = [
# 配置检索的路由
url(r'^search/', include("haystack.urls")),
]
注意:子路由不需要自己配了,因为下载的应用已经自己配好,查看的目录
C:\Users\admin\AppData\Local\Programs\Python\Python36-32\Lib\site-packages\haystack\urls.pyurlpatterns = [ url(r'^admin/', admin.site.urls), # 子模块 url(r'^myblog/', include('myblog.urls')), # 静态资源 url(r'^index1/$', views.index1), # 主页面的路由 url(r'^base/$', views.base), # 继承主页面的子页面路由 url(r'^base_index1/$', views.base_index1), # 配置检索的路由 url(r'^search/', include("haystack.urls")), ]
6.创建结果展示页面,路径和名称固定,
在temp/search/创建search.html,内容如下:
<!DOCTYPE html> <html> <head> <title></title> </head> <body> {% if query %} <h3>搜索结果如下:</h3> {% for result in page.object_list %} <a href="/blog/details_article/{ { result.object.id }}//{ { result.object.id }}/"> { { result.object.title }} </a><br/> {% empty %} <p>啥也没找到</p> {% endfor %} {% if page.has_previous or page.has_next %} <div> {% if page.has_previous %} <a href="?q={ { query }}&page={ { page.previous_page_number }}"> {% endif %} « 上一页 {% if page.has_previous %} </a> {% endif %} | {% if page.has_next %} <a href="?q={ { query }}&page={ { page.next_page_number }}"> {% endif %} 下一页 » {% if page.has_next %} </a> {% endif %} </div> {% endif %} {% endif %} </body> </html>
7.设定中文分词:即修改搜索引擎为中文分词
(1)在子模块中创建whoosh_cn_backend.py
复制 Lib\site- packages\haystack\backends\whoosh_backend.py 文件,
粘贴到应用目录下(这里是 mysearch)改名为 whoosh_cn_backend.py。
(2)导入模块:from jieba.analyse import ChineseAnalyzer
(3)在166行:查找 analyzer=StemmingAnalyzer() 改为 analyzer=ChineseAnalyzer()
8.生成索引
初始化索引数据:>> python manage.py rebuild_index
9.在需要的模板中创建搜索栏 :
<form method='get' action="/search/" target="_blank">
<input type="text" name="q">
<input type="submit" value="查询">
</form>
图片1:步骤4.设置数据模板article_text.txt
图片2:步骤3. 创建索引类search_indexes.py 步骤7.设定中文分词whoosh_cn_backend.py
图片3:步骤6.创建结果展示页面,路径和名称固定
在步骤7.中设定中文分词:whoosh_cn_backend.py文件如下