Django实现全文检索的方法(支持中文)

  

<>强PS:我的检索是在文章模块下论坛/文章

  

<强>第一步:先安装需要的包:

        pip安装django-haystack   pip安装嗖   pip安装jieba      

<强>第二步:强配置需要的文件settings.py

  

添加干草堆应用模块

        INSTALLED_APPS=(   …   “干草堆”,   …   )   之前      

在设置。py末尾添加

        HAYSTACK_CONNECTIONS={   “默认”:{   “发动机”:“article.whoosh_cn_backend.WhooshEngine”,   “路径”:os.path。加入(BASE_DIR whoosh_index),   },   }   HAYSTACK_SIGNAL_PROCESSOR=' haystack.signals。RealtimeSignalProcessor ' #索引自动更新      

<强>第三步:强配置url路径

  

在论坛/论坛/urls . py中包含搜索路径

        url (r ^搜索/,包括(haystack.urls)),   之前      

<强>第四步:强建立模型

  

论坛/文章/models.py

        类文章(models.Model):   '''   文章数据模型   '''   id=models.AutoField (primary_key=True, verbose_name=拔恼卤嗪拧?   标题=models.CharField (max_length=50, verbose_name=拔恼卤晏狻?   内容=MDTextField ()   publish_time=models.DateTimeField (auto_now_add=True, verbose_name='发表时间的)   last_update_time=models.DateTimeField (auto_now=True, verbose_name='最后一次修改时间的)   状态=模型。IntegerField (u的状态”,默认=1)   read_count=models.IntegerField(默认=0,verbose_name=霸亩链问?   comment_count=models.IntegerField(默认=0,verbose_name=捌缆鄞问?      #关联用户   用户=models.ForeignKey(用户、on_delete=models.CASCADE verbose_name='用户”)   主题=模型。ForeignKey(主题、零=True,空白=True,>   从文章。模型导入文章   从干草堆导入索引         类ArticleIndex(索引。SearchIndex indexes.Indexable):      文本索引。CharField(文档=True, use_template=True)      def get_model(自我):   返回文章      def index_queryset(自我,使用=None):   返回self.get_model () .objects.filter(状态=1)      之前      

每个索引里面必须有且只能有一个字段为文档=True

  

<强>第六步:确定我们需要的属性:

  

新建yourapp/模板/搜索//yourapp/article_text索引。txt来指明需要属性
  

  

例:文章/模板/搜索/索引/yourapp/article_text.txt

        {{对象。标题}}#文章标题   {{object.user。用户名}}#文章作者   {{对象。内容}}#文章内容      

<强>第七步:把搜索引擎放入项目下

  

例:论坛/文章/whoosh_cn_backend.py

  

将文件whoosh_backend。py(例:我的python路径E: \ python \ Lib \网站\干草堆\后端\ whoosh_backend。py
  )放到下条并重命名为whoosh_cn_backend.py,例如博客/whoosh_cn_backend.py。修改如下:

  

导入,
  

        从jieba。分析进口ChineseAnalyzer      

找到
  

  

代码如下:schema_fields [field_class。index_fieldname]=文本(存储=True,分析仪=StemmingAnalyzer (), field_boost=field_class。提振,可分类的=True)
  

  

然后将其修改为
  

  

代码如下:schema_fields [field_class。index_fieldname]=文本(存储=True,分析仪=ChineseAnalyzer (), field_boost=field_class。提振,可分类的=True)

  

成功引入jieba分词

  

<强>第八步:前端页面配置

  

模板/基地。html(搜索页面)

        & lt;形式类=" navbar-form navbar-left " action="/搜索/狈椒?“获得”比;   祝辞& lt; div class="形式的班级”;   & lt;输入类型=拔谋尽眂lass=氨淼タ丶泵?皅”占位符=扒胧淙胨阉鞯哪谌? value="/比;   & lt;/div>   & lt;输入类型="提交" value=" https://www.yisu.com/zixun/搜索”在   & lt;/form>      

结果展示页面(论坛/文章/模板/搜索/search.html)

        {%延伸的基础。html ' %}      {%块标题%}搜索结果{% endblock %}      {%块内容%}   & lt; div类="容器" id=澳谌荨痹?   & lt; div类=皊earch-body”比;      & lt;形式方法="得到" action="比;   & lt; table>   & lt; tr>   & lt; td>   & lt;标签=" id_q "祝辞& lt;/label>   & lt;/td>   & lt; td>   & lt;输入类="表单控件" id=" id_q " name=" q " type="搜索" value=" https://www.yisu.com/zixun/{{查询}}"/比;   & lt;/td>      & lt; td>,, & lt;/td>   & lt; td>   & lt;按钮类=癰tn btn-defaul”类型=疤峤弧弊4? lt;跨类=癵lyphicon glyphicon-search”在搜索& lt;/span> & lt;/button>   & lt;/td>   & lt;/tr>         & lt;/table>   & lt;/form>   {%如果查询%}   & lt; h4>搜索结果& lt;/h4>      & lt;表类=氨怼痹?   & lt; tr>      {%的结果页面。object_list %}   & lt; td>   & lt; p>   & lt; a href=" https://www.yisu.com/zixun/{% url 'article: article_detail ' article_id=result.object。id %} " rel="外部nofollow”比;   {{result.object。标题}}& lt;/a>   & lt;/p>作者:& lt; a href=" https://www.yisu.com/zixun/{% url 'user: user_index result.object.user。id %} " rel="外部nofollow”在{{result.object.user。用户名}}& lt;/a>   & lt; p> {{result.object。内容安全| | truncatechars_html: 40}} & lt;/p>   & lt;/td>   & lt;/tr>      {%空%}   & lt; p>没有得到想要的结果哦。你们;/p>   {% endfor %}   & lt;/table>         {%如果页面。has_previous或页面。has_next %}   & lt; div>   {%如果页面。has_previous %} & lt; a href=" https://www.yisu.com/zixun/?q={{查询}},页面={{页面。previous_page_number}} " rel="外部nofollow”在{% endif %}, laquo;如果页面上一页{%。has_previous %} & lt;/a> {% endif %}   |   {%如果页面。has_next %} & lt; a href=" https://www.yisu.com/zixun/?q={{查询}},页面={{页面。null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

Django实现全文检索的方法(支持中文)