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