django项目中全文检索,搜索功能的实现

原创 2018年04月15日 08:13:57

1,安装jieba,whoosh,haystack

pip install XXXX

2,改项目的一些配置

    增加search的模板

search.html如下:

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
{% if query %}
    <h3>搜索结果如下:</h3>
    {% for result in page.object_list %}
        <a href="/{{ result.object.id }}/">{{ result.object.gtitle }}</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>

在你的应用下添加search_indexes.py;whoosh要求名字要一字不错!

search_indexes.py如下:

#encoding=utf-8

from models import GoodsInfo
from haystack import indexes


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

    # 对pdname和description字段进行索引
    gtitle = indexes.CharField(model_attr='gtitle')

    gjianjie = indexes.CharField(model_attr='gjianjie')

    def get_model(self):
        return GoodsInfo

    def index_queryset(self, using=None):
        return self.get_model().objects.all()
根级url下


settings.py中添加haystack引擎生成索引,设置每次自动生成索引


说明:复制whoosh_backend.py文件一个拷贝,改名为whoosh_cn_backend.py,并且将下图代码修改

from .ChineseAnalyzer import ChineseAnalyzer 
查找
analyzer=StemmingAnalyzer()
改为
analyzer=ChineseAnalyzer()

我们一般使用中文开发网站,因此需要中文引擎:建立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()

3,生成索引:

python manage.py rebuild_index

我使用的py2.7部署的,正常运行了,希望可以帮到你!

觉得不错的亲,给个赞哈。


Django - 一个简单的界面显示实现

1. 前提创建工程和app后,使用Pycharm打开项目;Django - 创建工程 和 APP 与 开发工具这里在testapp下进行开发一个模块,演示一个例子。2. 栗子(1)实现view t...
  • LABLENET
  • LABLENET
  • 2016-11-24 13:59:49
  • 2811

用django实现一个简单的页面

学习了一段时间的django,今天总算对它有点感觉了。用自己的话介绍django,应该就是一种可以通过执行一系列的方法,将请求的内容返回给客户的web框架。 1.首先,创建项目,创建app,连接服务...
  • miaomiao0313
  • miaomiao0313
  • 2017-03-22 20:59:40
  • 1608

实现Django的全文检索功能(一):选择Whoosh全文检索引擎

Django没有内置全文检索功能,这方面的资料也很少。 有搜到两篇,一篇是使用 在django应用上使用sphinx全文搜索 还有一篇是使用Whoosh的,看这里 其中whoo...
  • wenxuansoft
  • wenxuansoft
  • 2012-11-10 20:36:50
  • 22636

在flask项目中利用ilike进行搜索

在项目中的表格上方,通常都会添加一个搜索窗口,按输入内容进行搜索。搜索过程是前端输入内容,提交一个表单到相应的路由函数,表单内容在函数中获取是通过request.args.get(‘q’, ”)。我这...
  • huitailang1991
  • huitailang1991
  • 2017-10-30 16:09:58
  • 273

django 使用全局搜索功能

安装需要的包1 第一步: 全文检索不同于特定字段的模糊查询,使用全文检索的效率更高,并且能够对于中文进行分词处理。haystack:全文检索的框架,支持whoosh、solr、Xapian、Elast...
  • Demo_3
  • Demo_3
  • 2017-07-02 19:29:28
  • 1240

Django搜索工具——全文检索

全文检索不同于特定字段的模糊查询,使用全文检索的效率更高,并且能够对于中文进行分词处理haystack:全文检索的框架,支持whoosh、solr、Xapian、Elasticsearc四种全文检索引...
  • xun527
  • xun527
  • 2017-10-28 11:23:22
  • 214

solr搜索(项目中实现)

确定搜索关键字: 分析关键字,通过名称、商品编号、订单号搜索:使用数据库实现搜索: 性能差,使用solr搜索: a)下单成功后,将订单数据写入到solr中b)从solr中所搜:使用三个字段 o...
  • erhei0317
  • erhei0317
  • 2016-09-22 14:25:46
  • 4981

django学习——如何实现简单的搜索功能

搜索功能的实现是用户在前端页面输入需要搜索的内容,然后通过url传递到后端,后端的视图函数从数据库中查找出指定的对象,然后在传递到前端页面的一个过程。这里主要讲视图函数中的查找过程:view.pyfr...
  • geerniya
  • geerniya
  • 2018-01-10 16:28:15
  • 120

做项目过程中对于搜索框的实现

1、对于搜索框中的method要用get方法,只有这样才能获得想要的
  • bj123467
  • bj123467
  • 2017-06-09 10:38:40
  • 174

电商项目笔记之四:搜索功能的实现

一:前台 这个项目namespace分的比较多, 所以struts的form要指定 这个namespace就是struts.xml里package配置的namespace 提交按钮用了一个背景图...
  • ruantao1989
  • ruantao1989
  • 2012-12-25 23:55:07
  • 1486
收藏助手
不良信息举报
您举报文章:django项目中全文检索,搜索功能的实现
举报原因:
原因补充:

(最多只允许输入30个字)