django16--全文搜索

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.py

urlpatterns = [
    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 }}&amp;page={
   
   { page.previous_page_number }}">
        {% endif %}
        &laquo; 上一页
        {% if page.has_previous %}
    </a>
    {% endif %}
    |
    {% if page.has_next %}
    <a href="?q={
   
   { query }}&amp;page={
   
   { page.next_page_number }}">
        {% endif %}
        下一页 &raquo;
        {% 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   路径2   路径3

图片1:步骤4.设置数据模板article_text.txt   

图片2:步骤3. 创建索引类search_indexes.py    步骤7.设定中文分词whoosh_cn_backend.py

图片3:步骤6.创建结果展示页面,路径和名称固定

 在步骤7.中设定中文分词:whoosh_cn_backend.py文件如下

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值