【Baidu cloud search, search all kinds of information :http://www.lqkweb.com】
【Search the net disk, search all kinds of information :http://www.swpan.cn】
【Cool station group, search a variety of website source :http://www.kuzq.cn】

Django implements search

1. Configure the route map for the search results page in Django

"""pachong URL Configuration The `urlpatterns` list routes URLs to views. For more information please see: https://docs.djangoproject.com/en/1.10/topics/http/urls/ Examples: the Function views 1. Add an import: from my_app import views 2. Add a URL to urlpatterns: url(r'^/pre>, views.home, name='home') Class-based views 1. Add an import: from other_app.views import Home 2. Add a URL to urlpatterns: url(r'^/pre>, Home.as_view(), name='home') Including another URLconf 1. Import the include() function: from django.conf.urls import url, include 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) """ from django.conf.urls import url from django.contrib import admin from app1 import views urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^/pre>, views.indexluoji), url(r'^index/', views.indexluoji), Suggestluoji,name=" Suggest "url(r'^search//pre>, Views. Suggestluoji,name=" Suggest ") Views. searchLuoji,name="search"), # search]

2. Write logical processing functions

Search data in a logical processing function

(1) Get the user’s search terms

ElasticSearch (ElasticSearch) : ElasticSearch (ElasticSearch) : ElasticSearch (ElasticSearch) : ElasticSearch (ElasticSearch) : ElasticSearch

The elasticSearch () method connects to the native ElasticSearch server

ElasticSearch () is an elasticsearch method that supports native ElasticSearch and returns the results of the native ElasticSearch statement in dictionary form

Highlight keywords in query statements

The query results will be returned to the HTML page after cyclic acquisition

from django.shortcuts import render # Create your views here. from django.shortcuts import render,HttpResponse from Django. Views. Generic. The base import the View from. Models import lagouType # import operation elasticsearch (search engine) import json from Client = elasticsearch(hosts=["127.0.0.1"]) # Connect to native Elasticsearch Def IndexLuoji (request): SuggestLuoji (request, 'index.html') def suggestluoji(request): Re_datas = [] if re_datas = [] if key_words: S = s.Suggest ('my_suggest', key_words, completion={"field": "suggest", "fuzzy": { "fuzziness": 1 }, "size": 5 }) suggestions = s.execute_suggest() for match in suggestions.my_suggest[0].options: source = match._source re_datas.append(source["title"]) return HttpResponse(json.dumps(re_datas), content_type="application/json") def searchluoji(request): Key_words = request.get. GET ('q', ') (select * from www.elasticsearch where index_type = 'biao') select * from www.elasticsearch where index_type = 'biao'; {"multi_match": {# multi_match query" query": key_words, # query" Fields ": ["title", "description"] # query field}}, "from": 0, # fetches "size": 10, # fetches how many pieces of data "highlight": {# fetches "pre_tags": [' < span class = "keyWord" > '], # highlight the start tag "post_tags" : [' < / span > '], # "fields" highlighting the end tag: {# highlight "title" : {}, # highlight field "description": {}}}) total_nums = response["hits"]["total"] # get_list = [] Return to HTML for hit in response["hits"]["hits"]: # set a dictionary to hold loop results if "title" in hit["highlight"]: Hit_dict [" dict "] = ". Join (hit["highlight"]["title"]) # else: Dict ["title"] = hit["_source"]["title"] # if "description" in hit["highlight"]: # select description from description; Hit_dict ["description"] = "". Join (hit["highlight"]["description"])[:500] # get description else: "Dict ["description"] = hit["_source"]["description"] # Return render(request, 'result.html', {"all_hits": Hit_list, "key_words": key_words}) # Displays the page and returns the list and search terms to HTML

The HTML page receives the search results

Note: Since Django prevents malicious code from being written to an HTML page, any HTML type code that is passed to an HTML page via a variable will be automatically converted to a string. Indexing the field that receives the variable will need to be used: {% autoescape off %} {{receive variable}} {% endautoescape %} to display the HTML code,

There is a jump after the search, so the search term in the search box will not exist, we need to pass the search term to the page when the search results are passed to fill in the search box

<!DOCTYPE html >
<html xmlns="http://www.w3.org/1999/xhtml">
{#引入静态文件路径#}
{% load staticfiles %}
<head>
<meta http-equiv="X-UA-Compatible" content="IE=emulateIE7" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>python-lcv-search搜索引擎</title>
<link href="{% static 'css/style.css'%}" rel="stylesheet" type="text/css" />
<link href="{% static 'css/result.css'%}" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="container">
    <div id="hd" class="ue-clear">
        <a href="/"><div class="logo"></div></a>
        <div class="inputArea">
            <input type="text" class="searchInput" value="{{ key_words }}"/>
            <input type="button" class="searchButton" onclick="add_search()"/>
        </div>
    </div>
    <div class="nav">
        <ul class="searchList">
            <li class="searchItem current" data-type="article">文章</li>
            <li class="searchItem" data-type="question">问答</li>
            <li class="searchItem" data-type="job">职位</li>
        </ul>
    </div>
    <div id="bd" class="ue-clear">
        <div id="main">
            <div class="sideBar">

                <div class="subfield">网站</div>
                <ul class="subfieldContext">
                    <li>
                        <span class="name">伯乐在线</span>
                        <span class="unit">(None)</span>
                    </li>
                    <li>
                        <span class="name">知乎</span>
                        <span class="unit">(9862)</span>
                    </li>
                    <li>
                        <span class="name">拉勾网</span>
                        <span class="unit">(9862)</span>
                    </li>
                    <li class="more">
                        <a href="javascript:;">
                            <span class="text">更多</span>
                            <i class="moreIcon"></i>
                        </a>
                    </li>
                </ul>

                <div class="sideBarShowHide">
                    <a href="javascript:;" class="icon"></a>
                </div>
            </div>
            <div class="resultArea">
                <p class="resultTotal">
                    <span class="info">找到约&nbsp;<span class="totalResult">45</span>&nbsp;条结果(用时<span class="time">0.643128</span>秒),共约<span class="totalPage">5</span>页</span>
                </p>
                <div class="resultList">
                    {% for hit in all_hits %}
                    <div class="resultItem">
                            <div class="itemHead">
                                <a href="{% autoescape off %} {{ hit.url }} {% endautoescape %}"  target="_blank" class="title">{% autoescape off %} {{ hit.title }} {% endautoescape %}</a>
                                <span class="divsion">-</span>
                                <span class="fileType">
                                    <span class="label">来源:</span>
                                    <span class="value">网络</span>
                                </span>
                                <span class="dependValue">
                                    <span class="label">得分:</span>
                                    <span class="value">3.401155</span>
                                </span>
                            </div>
                            <div class="itemBody">
                                {% autoescape off %} {{ hit.description }} {% endautoescape %}
                            </div>
                        </div>
                    {% endfor %}
                </div>
                <!-- 分页 -->
                <div class="pagination ue-clear"></div>
                <!-- 相关搜索 -->

            </div>
            <div class="historyArea">
                <div class="hotSearch">
                    <h6>热门搜索</h6>
                    <ul class="historyList">

                            <li><a href="/search?q=linux">linux</a></li>

                    </ul>
                </div>
                <div class="mySearch">
                    <h6>我的搜索</h6>
                    <ul class="historyList">

                    </ul>
                </div>
            </div>
        </div><!-- End of main -->
    </div><!--End of bd-->
</div>

<div id="foot">Copyright &copy;projectsedu.com 版权所有  E-mail:[email protected]</div>
</body>
<script type="text/javascript" src="{% static 'js/jquery.js'%}"></script>
<script type="text/javascript" src="{% static 'js/global.js'%}"></script>
<script type="text/javascript" src="{% static 'js/pagination.js'%}"></script>
<script type="text/javascript">
    var search_url = "/search/"

    $('.searchList').on('click', '.searchItem', function(){
        $('.searchList .searchItem').removeClass('current');
        $(this).addClass('current');    
    });

    $.each($('.subfieldContext'), function(i, item){
        $(this).find('li:gt(2)').hide().end().find('li:last').show();        
    });

    function removeByValue(arr, val) {
      for(var i=0; i<arr.length; i++) {
        if(arr[i] == val) {
          arr.splice(i, 1);
          break;
        }
      }
    }
    $('.subfieldContext .more').click(function(e){
        var $more = $(this).parent('.subfieldContext').find('.more');
        if($more.hasClass('show')){

            if($(this).hasClass('define')){
                $(this).parent('.subfieldContext').find('.more').removeClass('show').find('.text').text('自定义');
            }else{
                $(this).parent('.subfieldContext').find('.more').removeClass('show').find('.text').text('更多');    
            }
            $(this).parent('.subfieldContext').find('li:gt(2)').hide().end().find('li:last').show();
        }else{
            $(this).parent('.subfieldContext').find('.more').addClass('show').find('.text').text('收起');
            $(this).parent('.subfieldContext').find('li:gt(2)').show();    
        }

    });

    $('.sideBarShowHide a').click(function(e) {
        if($('#main').hasClass('sideBarHide')){
            $('#main').removeClass('sideBarHide');
            $('#container').removeClass('sideBarHide');
        }else{
            $('#main').addClass('sideBarHide');    
            $('#container').addClass('sideBarHide');
        }

    });
    var key_words = "java"
    //分页
    $(".pagination").pagination(45, {
        current_page :0, //当前页码
        items_per_page :10,
        display_msg :true,
        callback :pageselectCallback
    });
    function pageselectCallback(page_id, jq) {
        window.location.href=search_url+'?q='+key_words+'&p='+page_id
    }

    setHeight();
    $(window).resize(function(){
        setHeight();    
    });

    function setHeight(){
        if($('#container').outerHeight() < $(window).height()){
            $('#container').height($(window).height()-33);
        }    
    }
</script>
<script type="text/javascript">
    $('.searchList').on('click', '.searchItem', function(){
        $('.searchList .searchItem').removeClass('current');
        $(this).addClass('current');
    });

    // 联想下拉显示隐藏
    $('.searchInput').on('focus', function(){
        $('.dataList').show()
    });

    // 联想下拉点击
    $('.dataList').on('click', 'li', function(){
        var text = $(this).text();
        $('.searchInput').val(text);
        $('.dataList').hide()
    });

    hideElement($('.dataList'), $('.searchInput'));
</script>
<script>
    var searchArr;
    //定义一个search的,判断浏览器有无数据存储(搜索历史)
    if(localStorage.search){
        //如果有,转换成 数组的形式存放到searchArr的数组里(localStorage以字符串的形式存储,所以要把它转换成数组的形式)
        searchArr= localStorage.search.split(",")
    }else{
        //如果没有,则定义searchArr为一个空的数组
        searchArr = [];
    }
    //把存储的数据显示出来作为搜索历史
    MapSearchArr();

    function add_search(){
        var val = $(".searchInput").val();
        if (val.length>=2){
            //点击搜索按钮时,去重
            KillRepeat(val);
            //去重后把数组存储到浏览器localStorage
            localStorage.search = searchArr;
            //然后再把搜索内容显示出来
            MapSearchArr();
        }

        window.location.href=search_url+'?q='+val+"&s_type="+$(".searchItem.current").attr('data-type')

    }

    function MapSearchArr(){
        var tmpHtml = "";
        var arrLen = 0
        if (searchArr.length > 6){
            arrLen = 6
        }else {
            arrLen = searchArr.length
        }
        for (var i=0;i<arrLen;i++){
            tmpHtml += '<li><a href="/search?q='+searchArr[i]+'">'+searchArr[i]+'</a></li>'
        }
        $(".mySearch .historyList").append(tmpHtml);
    }
    //去重
    function KillRepeat(val){
        var kill = 0;
        for (var i=0;i<searchArr.length;i++){
            if(val===searchArr[i]){
                kill ++;
            }
        }
        if(kill<1){
            searchArr.unshift(val);
        }else {
            removeByValue(searchArr, val)
            searchArr.unshift(val)
        }
    }
</script>
</html>

The final result