Django implements the search function
1. The route map on the Django Configuration search results page
"" Pachong URL configurationthe ' urlpatterns ' list routes URLs to views. For more information see:https://docs.djangoproject.com/en/1.10/topics/http/urls/examples:function views 1. ADD an import:from My_app import views 2. Add a URL to Urlpatterns:url (R ' ^$ ', 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 ' ^$ ', 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 urlfrom django.contrib impo RT Adminfrom App1 Import viewsurlpatterns = [url (r ' ^admin/', admin.site.urls), url (r ' ^$ ', views.indexluoji), url (R ' ^index/', Views.indexluoji), url (r ' ^suggest/$ ', views.suggestluoji,name= "suggest"), # search field completion request URL (R ' ^search/ $ ', views.searchluoji,name= "search"), # Searching]
2, write the logical processing function
Implementing search data in logical processing functions
(1) Get the user's search terms
(2) using the native Elasticsearch (search engine) interface, to achieve the search, annotated:ELASTICSEARCH-DSL is on the original Elasticsearch to do the encapsulation
Elasticsearch () method to connect the native Elasticsearch server
The search () method, the native Elasticsearch query method, supports the native Elasticsearch query statement, and the returned native statement result is the data in the dictionary form
Keyword highlighting in query statements
Returns the result of the query to the HTML page after the loop gets to the
From django.shortcuts import render# Create your views here.from django.shortcuts import Render,httpresponsefrom django.v Iews.generic.base Import viewfrom app1.models import lagoutype # Importing Operation Elasticsearch (search engine) class import Jsonfrom ELA Sticsearch Import Elasticsearch # Importing native Elasticsearch (search engine) interface client = Elasticsearch (hosts=["127.0.0.1"]) # Connection native Elasticsearchdef Indexluoji (Request): Print (Request.method) # Gets the path of the user request return render (request, ' index.html ') def su Ggestluoji (Request): # Search Auto-complete logic processing key_words = Request. Get.get (' s ', ') # gets to the request word Re_datas = [] If key_words:s = Lagoutype.search () # Instantiation of search query for Elasticsearch (search engine) class S = s.suggest (' my_suggest ', Key_words, completion={ "Field": "Suggest", "fuzzy": {"fuzziness": 1}, "Size": 5}) su Ggestions = 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): # search Logic Processing key_words = Request. Get.get (' Q ', ') # gets to the request word response = Client.search (# native Elast The search () method of the Icsearch interface, which is searching, can support the native Elasticsearch statement query index= "Lagou", # set the index name Doc_type= "Biao", # Sets the table name body={ # write Elasticsearch statement "query": {"Multi_match": {# mu Lti_match query "Query": key_words, # query keyword "fields": ["title", "description"] # query Field}}, "from": 0, # get "Size" from the first few: 10, # Get how many data "Highli Ght ": {# query keyword highlighting processing" pre_tags ": [' <span class= ' KeyWord ' > '], # Highlight start Tag "post_tags": [' </span> '], # Highlight end tag ' fields ': { # Highlight Set "title": {}, # Highlight field "description": {} # Highlight field}}) Total_nums = Respo nse["hits" ["Total"] # Gets the overall number of bars for the query result hit_list = [] # setting A list to store the information that was searched, returned to the HTML page for hits in response["hits" ["Hits"]: # Loop query to the result hit_dict = {} # Set a dictionary to store looping results if "title" in Hit["highlight"]: # Judgment Title field, if the highlighted field has a class capacity hit_dict["title"] = "". Join (hit["Highlight" ["title"]) # get the title else:hit_dict["title" in the Highlight) = hit["_source" ["title"] # otherwise get the title if "description" in hit["highlight") that is not highlighted: # Determine the Description field if the highlighted field has a class tolerance of hit_dict["description" = "". Join (hit["Highlight" ["description"]) [: 500] # Get the highlights in the description else:hit_dict["description"] = hit["_source" ["description"] # Otherwise get not the highlights of the DESCR iption hit_dict["url"] = hit["_source" ["url"] # Get Return URL hit_list.append (hit_dict) # will get a dictionary of content to add to the list return render (Request, ' result.html ', {"all_hits": hit_list, "Ke Y_words ": key_words}) #显示页面和将列表和搜索词返回到html
3. HTML pages Receive search results
Note: Because the Django implementation prevents malicious code from being written, the HTML type code that is transferred to the HTML page by the variable will be automatically converted to a string display, which we need to use in the field that receives the variable: {% autoescape off%} {{ Receive variable} {% Endautoescape%}, to display the HTML code,
After the search because of a jump, so the search box in the search term will not exist, we need to pass the search results to the page, the search word also passed in to fill in the search box
<! DOCTYPE html >Final effect
48 Python distributed crawler build search engine Scrapy explaining-elasticsearch (search engine) implements the search function with Django