2016-04-27 2 views
1

Ich benutze node.js, um eine Suchmaschine Web-App auf elasticsearch zu bauen. Ich habe eine Webseite in meinem Elasticsearch indexiert und benutze meinen Index in Express, um eine Webseite zu erstellen.Holen Sie sich eine Json-Ausgabe in node.js (Mit Elasticsearch und Express als Web-Framework)

Das ist mein javascript:

var elasticsearch = require('elasticsearch'); 

var client = elasticsearch.Client({ 
    hosts: [ 
    'localhost:9200' 
    ] 
}); 

module.exports.search = function(searchData, callback) { 
    client.search({ 
    index: 'demoindex1', 
    type: 'SearchTech', 
    body: { 
     query: { 
     bool: { 
      must: { 
      match: { 
       "newContent": searchData.searchTerm 
      } 
      } 
     } 
     } 
    } 
    }).then(function (resp) { 
    callback(resp.hits.hits); 
    }, function (err) { 
     callback(err.message) 
     console.log(err.message); 
    }); 
} 

Dies ist meine Routen javascript:

var express = require('express'); 
var router = express.Router(); 

var searchModule = require('../search_module/search.js'); 

/* GET home page. */ 
router.get('/', function(req, res) { 
    res.render('index', { title: 'Express' }); 
}); 

router.post('/search-results', function(req, res) { 
    searchModule.search(req.body, function(data) { 
    res.render('index', { title: 'Express', results: data }); 
    }); 
}); 

module.exports = router; 

Dies ist meine EJS-Datei, die ich verwende Web-Seite zu erstellen.

<!DOCTYPE html> 
<html> 
    <head> 
    <title><%= title %></title> 

    </head> 
    <body> 
    <h1><%= title %></h1> 
    <form action='/search-results' method='post'> 
     <input type="text" name="searchTerm" placeholder="your search term here"> 
     <button type="submit"> SEARCH </button> 
    </form> 
    <ul> 
     <% if(locals.results) { %> 
     <% results.forEach(function(result) { %> 
      <li> 
      <%= result._source.title %> 
      <br><%= result._source.U %> 
      </li> 
     <% }) %> 
     <% } %> 
    </ul> 
    </body> 
</html> 

Die Webseite Ich bin das sieht immer: http://i.stack.imgur.com/w8dVE.png

Wenn ich für eine Abfrage bin auf der Suche, bin ich einen Titel der Abfrage bekommen, die ich gesucht. Aber es ist nicht in JSON-Form. Ich möchte, dass meine Webseite das gleiche Ergebnis (JSON-Formular) ausgibt, das wir in elasticsearch erhalten, wenn wir eine Abfrage durchführen.

Antwort

1

Ein einfacher Weg, um die results als json data zur Anzeige ist von stringify in der ejs Vorlage

Beispiel für die Verwendung:

<!DOCTYPE html> 
<html> 
    <head> 
    <title>hello</title> 

    </head> 
    <body> 
    <h1><%= title %></h1> 
    <form action='/search-results' method='post'> 
     <input type="text" name="searchTerm" placeholder="your search term here"> 
     <button type="submit"> SEARCH </button> 
    </form> 
     <% if(locals.results) { %> 
     <pre> 
      <%- JSON.stringify(results,null,2) %> 
     </pre> 
     <% } %> 
    </body> 
</html> 
+0

Kleiner Tippfehler? '<% -' sollte lesen <% = ' – Val

+0

@keety Danke. Jetzt bekomme ich JSON-Ausgabe von elasticsearch. – Rose

+0

@Val Danke. – Rose

Verwandte Themen