Django - 开发站点

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 }}&amp;page={{ page.previous_page_number }}">{% endif %}&laquo; Previous{% if page.has_previous %}</a>{% endif %}
                    |
                    {% if page.has_next %}<a href="?q={{ query }}&amp;page={{ page.next_page_number }}">{% endif %}Next &raquo;{% if page.has_next %}</a>{% endif %}
                </div>
        {% endif %}
    {% else %}
        <h>请输入关键字</h>
    {% endif %}
<!--base.html-->
    <style>
        span.highlighted {
            color: red;
        }
    </style>

3: 效果图

搜索关键字为”测试“

搜索关键字“测试”

搜索效果如下。

搜索效果图

至此,关于搜索功能的内容就全部做完了。

上一篇 下一篇

猜你喜欢

热点阅读