forked from KEMT/zpwiki
		
	
		
			
				
	
	
		
			83 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| //index.js
 | |
| //require the Elasticsearch librray
 | |
| const elasticsearch = require('elasticsearch');
 | |
| // instantiate an elasticsearch client
 | |
| const client = new elasticsearch.Client({
 | |
|    hosts: [ 'http://localhost:9200']
 | |
| });
 | |
| //require Express
 | |
| const express = require( 'express' );
 | |
| // instanciate an instance of express and hold the value in a constant called app
 | |
| const app     = express();
 | |
| //require the body-parser library. will be used for parsing body requests
 | |
| const bodyParser = require('body-parser')
 | |
| //require the path library
 | |
| const path    = require( 'path' );
 | |
| 
 | |
| //consts
 | |
| 
 | |
| // ping the client to be sure Elasticsearch is up
 | |
| client.ping({
 | |
|      requestTimeout: 30000,
 | |
|  }, function(error) {
 | |
|  // at this point, eastic search is down, please check your Elasticsearch service
 | |
|      if (error) {
 | |
|          console.error('elasticsearch cluster is down!');
 | |
|      } else {
 | |
|          console.log('Everything is ok');
 | |
|      }
 | |
|  });
 | |
| 
 | |
| 
 | |
| // use the bodyparser as a middleware  
 | |
| app.use(bodyParser.json())
 | |
| // set port for the app to listen on
 | |
| app.set( 'port', process.env.PORT || 3001 );
 | |
| // set path to serve static files
 | |
| app.use( express.static( path.join( __dirname, 'public' )));
 | |
| // enable CORS 
 | |
| app.use(function(req, res, next) {
 | |
|   res.header("Access-Control-Allow-Origin", "*");
 | |
|   res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');
 | |
|   res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
 | |
|   next();
 | |
| });
 | |
| 
 | |
| // defined the base route and return with an HTML file called tempate.html
 | |
| app.get('/', function(req, res){
 | |
|   res.sendFile('template2.html', {
 | |
|      root: path.join( __dirname, 'views' )
 | |
|    });
 | |
| })
 | |
| 
 | |
| // define the /search route that should return elastic search results 
 | |
| app.get('/search', function (req, res){
 | |
|   // declare the query object to search elastic search and return only 200 results from the first result found. 
 | |
|   // also match any data where the name is like the query string sent in
 | |
|   let body = {
 | |
|     size: 200,
 | |
|     from: 0, 
 | |
|     query: {
 | |
|       match: {
 | |
|           body: req.query['q'] // demo veryia, tato cast skriptu sa upravi abz vzhladavalo v titulkoch a tele 
 | |
|       }
 | |
|     }
 | |
|   }
 | |
|   // perform the actual search passing in the index, the search query and the type
 | |
|   client.search({index:'skweb2',  body:body, type:'web_page'})
 | |
|   .then(results => {
 | |
|     res.send(results.hits.hits);
 | |
|   })
 | |
|   .catch(err=>{
 | |
|     console.log(err)
 | |
|     res.send([]);
 | |
|   });
 | |
| 
 | |
| })
 | |
| // listen on the specified port
 | |
| app .listen( app.get( 'port' ), function(){
 | |
|   console.log( 'Express server listening on port ' + app.get( 'port' ));
 | |
| } );
 | |
| 
 | |
| 
 |