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' ));
 | 
						|
} );
 | 
						|
 | 
						|
 |