Django NBA Web开发 - Step 12 全文搜索功
2019-05-15 本文已影响0人
AllenBigBear
上面一篇已经完成了搜索功能的大部分功能,不过haystack对中文的搜索并不是特别好,所以我们这里引入了jieba分词。
1: 配置
从安装的 haystack 中把 haystack/backends/whoosh_backends.py 文件拷贝到 应用的根目录下面。
并将
schema_fields[field_class.index_fieldname] = TEXT(stored=True, analyzer=StemmingAnalyzer(), field_boost=field_class.boost, sortable=True)
改成
schema_fields[field_class.index_fieldname] = TEXT(stored=True, analyzer=ChineseAnalyzer(), field_boost=field_class.boost, sortable=True)
2:高亮显示搜索的关键字
一般搜索以后我们希望看到我们搜索的是哪个关键字,需要做到这样的功能,需要在前端渲染。
修改前端代码
用标签{% highlight ... with query %}
来对搜索的关键字进行高亮显示,默认状态下,他会对关键字进行<span>的包裹,这样,就需要我们对span的highlighted属性进行设置,我们设置在base.html里面,这样其他所有继承的页面都可以使用
{% if query %}
<h3>搜索结果如下</h3>
{% for result in page.object_list %}
<ul><a href="{{ result.object.get_absolute_url }}">{% highlight result.object.article_title with query %}</a></ul>
{% empty %}
<p>No result found.</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 %}« Previous{% if page.has_previous %}</a>{% endif %}
|
{% if page.has_next %}<a href="?q={{ query }}&page={{ page.next_page_number }}">{% endif %}Next »{% if page.has_next %}</a>{% endif %}
</div>
{% endif %}
{% else %}
<h>请输入关键字</h>
{% endif %}
<!--base.html-->
<style>
span.highlighted {
color: red;
}
</style>
3: 效果图
搜索关键字“测试”搜索关键字为”测试“
搜索效果图搜索效果如下。
至此,关于搜索功能的内容就全部做完了。