<>强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 nullDjango实现全文检索的方法(支持中文)