├── README.md ├── Frontend ├── app.py └── templates │ └── home.html └── Backend └── api.py /README.md: -------------------------------------------------------------------------------- 1 | # AutoComplete-Input-Elastic-Search-Python 2 |  3 | * remember you can use regular expression query or match phrase prefix please see youtube video for demo 4 | 5 | 6 | #### Tutorial 7 | * https://www.youtube.com/watch?v=gDOu_Su1GqY 8 | 9 | Creating Auto Complete System Frontend Flask + Backend (Elastic Search) 10 | -------------------------------------------------------------------------------- /Frontend/app.py: -------------------------------------------------------------------------------- 1 | from flask import Flask 2 | from flask import request,redirect,render_template,session 3 | import requests 4 | import base64 5 | import requests 6 | 7 | app = Flask(__name__) 8 | 9 | 10 | @app.route('/', methods=["GET", "POST"]) 11 | def index(): 12 | return render_template("home.html") 13 | 14 | 15 | @app.route('/pipe', methods=["GET", "POST"]) 16 | def pipe(): 17 | data = request.form.get("data") 18 | payload = {} 19 | headers= {} 20 | url = "http://127.0.0.1:4000/autocomplete?query="+str(data) 21 | response = requests.request("GET", url, headers=headers, data = payload) 22 | return response.json() 23 | 24 | 25 | 26 | if __name__ == "__main__": 27 | app.run(debug=True, port=5000) -------------------------------------------------------------------------------- /Backend/api.py: -------------------------------------------------------------------------------- 1 | try: 2 | from flask import app,Flask 3 | from flask_restful import Resource, Api, reqparse 4 | import elasticsearch 5 | from elasticsearch import Elasticsearch 6 | import datetime 7 | import concurrent.futures 8 | import requests 9 | import json 10 | except Exception as e: 11 | print("Modules Missing {}".format(e)) 12 | 13 | 14 | app = Flask(__name__) 15 | api = Api(app) 16 | 17 | #------------------------------------------------------------------------------------------------------------ 18 | 19 | NODE_NAME = 'myelkfirst' 20 | es = Elasticsearch([{'host': 'localhost', 'port': 9200}]) 21 | 22 | #------------------------------------------------------------------------------------------------------------ 23 | 24 | 25 | """ 26 | { 27 | "wildcard": { 28 | "title": { 29 | "value": "{}*".format(self.query) 30 | } 31 | } 32 | } 33 | 34 | """ 35 | 36 | 37 | class Controller(Resource): 38 | def __init__(self): 39 | self.query = parser.parse_args().get("query", None) 40 | self.baseQuery ={ 41 | "_source": [], 42 | "size": 0, 43 | "min_score": 0.5, 44 | "query": { 45 | "bool": { 46 | "must": [ 47 | { 48 | "match_phrase_prefix": { 49 | "title": { 50 | "query": "{}".format(self.query) 51 | } 52 | } 53 | } 54 | ], 55 | "filter": [], 56 | "should": [], 57 | "must_not": [] 58 | } 59 | }, 60 | "aggs": { 61 | "auto_complete": { 62 | "terms": { 63 | "field": "title.keyword", 64 | "order": { 65 | "_count": "desc" 66 | }, 67 | "size": 25 68 | } 69 | } 70 | } 71 | } 72 | 73 | def get(self): 74 | res = es.search(index=NODE_NAME, size=0, body=self.baseQuery) 75 | return res 76 | 77 | 78 | parser = reqparse.RequestParser() 79 | parser.add_argument("query", type=str, required=True, help="query parameter is Required ") 80 | 81 | api.add_resource(Controller, '/autocomplete') 82 | 83 | 84 | if __name__ == '__main__': 85 | app.run(debug=True, port=4000) 86 | -------------------------------------------------------------------------------- /Frontend/templates/home.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 |