diff --git a/index.js b/index.js new file mode 100644 index 00000000..b128ac28 --- /dev/null +++ b/index.js @@ -0,0 +1,41 @@ +const db = require("./src/models/index"); +const client = require("./src/utilities/elasticsearchUtils/elasticsearchConnection"); + +const countriesAttributes = [ + "id", + "nameOfCountry", + "gallery", + "capital", + "population", + "officialLanguage", + "region", + "currency", +]; +let countryDetails; +db.Countries.findAll({ + attributes: countriesAttributes, + include: [{ model: db.TouristCenters, as: "touristCenters" }, { model: db.States, as: "states" }, { model: db.EthnicGroups, as: "ethnicGroups" }, { model: db.Music, as: "music" }, { model: db.Foods, as: "Food" }] +}) + .then(country => { + countryDetails = country.map(count => count.dataValues); + client.index({ + index: "country", + id: countryDetails[0].id, + type: "country", + body: { ...countryDetails[0] }, + }, (err, resp, status) => { + console.log(resp); + }); + }); + +client.ping({ + requestTimeout: 3000, +}, error => { + if (error) { + console.log("cannot connect to elasticsearch."); + console.error(error); + } +}); +client.cluster.health({}, (err, resp, status) => { + console.log(resp); +}); diff --git a/package.json b/package.json index 899e51ac..85131af7 100644 --- a/package.json +++ b/package.json @@ -5,14 +5,15 @@ "main": "src/app.js", "dependencies": { "@sendgrid/mail": "^7.2.6", + "async": "^3.2.0", "bcrypt": "^5.0.0", + "bcrypt-nodejs": "0.0.3", "body-parser": "^1.19.0", "cors": "^2.8.5", - "async": "^3.2.0", - "bcrypt-nodejs": "0.0.3", "cross-env": "^7.0.2", "crypto": "^1.0.1", "dotenv": "^8.2.0", + "elasticsearch": "^16.7.1", "express": "^4.17.1", "joi": "^17.2.1", "jsonwebtoken": "^8.5.1", diff --git a/search.js b/search.js new file mode 100644 index 00000000..ce6f6180 --- /dev/null +++ b/search.js @@ -0,0 +1,13 @@ +const db = require("./src/models/index"); +const client = require("./src/utilities/elasticsearchUtils/elasticsearchConnection"); + +client.indices.search({ + index: "country", + type: "country", +}, (error, response) => { + if (error) { + console.log(error.message); + } else { + console.log("Mapping:\n", response.country.mappings.country.properties); + } +}); diff --git a/src/controllers/SearchController.js b/src/controllers/SearchController.js new file mode 100644 index 00000000..023f04a8 --- /dev/null +++ b/src/controllers/SearchController.js @@ -0,0 +1,18 @@ +const client = require("../utilities/elasticsearchUtils/elasticsearchConnection"); + +client.ping({ + requestTimeout: 3, +}, error => { + if (error) { + console.log("Cannot connect to Elasticsearch."); + console.error(error); + } else { + console.log("connected to Elasticsearch was successful!"); + } +}); + +client.cluster.health({}, (err, resp, status) => { + console.log("-- Client Health", resp); +}); + +client.indices.delete({ index: "country" }, (err, resp, status) => { console.log("delete", resp); }); diff --git a/src/utilities/elasticsearchUtils/addDoc.js b/src/utilities/elasticsearchUtils/addDoc.js new file mode 100644 index 00000000..7b4a5eac --- /dev/null +++ b/src/utilities/elasticsearchUtils/addDoc.js @@ -0,0 +1,20 @@ +const db = require("../../models/index"); + +const countriesAttributes = [ + "id", + "nameOfCountry", + "gallery", + "capital", + "population", + "officialLanguage", + "region", + "currency", +]; +db.Countries.findAll({ + attributes: countriesAttributes, + include: [{ model: db.TouristCenters, as: "touristCenters" }, { model: db.States, as: "states" }, { model: db.EthnicGroups, as: "ethnicGroups" }, { model: db.Music, as: "music" }, { model: db.Foods, as: "Food" }] +}) + .then(country => { + const countryDetails = country.map(count => count.dataValues); + console.log(countryDetails); + }); diff --git a/src/utilities/elasticsearchUtils/createElasticsearchIndex.js b/src/utilities/elasticsearchUtils/createElasticsearchIndex.js new file mode 100644 index 00000000..d4c3c68f --- /dev/null +++ b/src/utilities/elasticsearchUtils/createElasticsearchIndex.js @@ -0,0 +1,11 @@ +const client = require("./elasticsearchConnection"); + +client.indices.create({ + index: "country" +}, (err, resp, status) => { + if (err) { + console.log(err); + } else { + console.log("create", resp); + } +}); diff --git a/src/utilities/elasticsearchUtils/deleteElasticsearchIndex.js b/src/utilities/elasticsearchUtils/deleteElasticsearchIndex.js new file mode 100644 index 00000000..63628e8f --- /dev/null +++ b/src/utilities/elasticsearchUtils/deleteElasticsearchIndex.js @@ -0,0 +1,3 @@ +const client = require("./elasticsearchConnection"); + +client.indices.delete({ index: "country" }, (err, resp, status) => { console.log("delete", resp); }); diff --git a/src/utilities/elasticsearchUtils/elasticsearchConnection.js b/src/utilities/elasticsearchUtils/elasticsearchConnection.js new file mode 100644 index 00000000..50cba4ff --- /dev/null +++ b/src/utilities/elasticsearchUtils/elasticsearchConnection.js @@ -0,0 +1,7 @@ +const elasticsearch = require("elasticsearch"); + +const client = new elasticsearch.Client({ + host: ["http://localhost:9200"] +}); + +module.exports = client;