У меня есть скрипт визуализации javascript, который использует твиты, которые проиндексированы в elasticsearch (перевариваются библиотекой tweepy), твиты проходят через elasticseach, и все работает нормально, однако визуализация работает только с моим локальным экземпляром elasticsearch (даже если я подключаюсь к нему через сервер, и оба экземпляра elasticsearch работают), если я отключаю локальный elasticsearch и пытаюсь запустить javascript, он не работает, и я получаю TypeError: response is undefined и Unable to revive connection: http://localhost:9200/.
Что мне нужно изменить, чтобы он работал из экземпляра elasticsearch, а не из локального экземпляра?
вот код javascript:
$(function() {
// Data
var colors = ["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd","#ccebc5","#ffed6f"];
var client = new elasticsearch.Client({
host: 'localhost:9200',
log: 'trace'
});
var index = "tw";
var loadData = function() {
var data_count = 10000;
client.search({
index: index,
q: "*.*",
size: data_count,
sort : 'timestamp:desc'
// sort: '_id'
}, function (error, response) {
hits = response.hits.hits;
data = hits.map(function(element, index, array) {
return element._source
});
// console.info(data);
formatTWEEPY(updateVis);
//
});
};
loadData();
// Instantiate vis
var timesets = sm.vis.timesets()
.colors(colors)
// .setMode("background")
// .applyLayout(false)
.verticalMode("ellipse")
.elementMode("gradient")
.showSettings(true)
.margin({ top: 0, right: 180, bottom: 0, left: 25 });
// Update the vis
var updateVis = function() {
// Update dimension
var width = $("svg").width();
var height = $("svg").height();
timesets.width(width).height(height - 30);
d3.select(".sm-timesets-demo").attr("transform", "translate(0, " + height + ")");
redraw();
};
function redraw() {
d3.select(".sm-timesets-demo").datum(data).call(timesets);
}
function formatTWEEPY(callback) {
data.forEach(d => {
d.themes = d.hashtags.map(function(t) {return t.text});
d.time = new Date(d.timestamp);
d.title = d.message;
});
// console.info(data)
var hashtags = flatten(data.map(function(t){return t.themes}))
// console.info(hashtags)
var dict = hashtags.reduce(function (p, c) {
p[c] = (p[c] || 0) + 1;
return p;
}, {});
var items = Object.keys(dict).map(function(key) {
return [key, dict[key]];
});
themes = items.sort((a, b) => d3.descending(a[1], b[1])).slice(0, 10).map(e => e[0])
data = { events: data.slice(), themes: themes };
callback();
}
});
function flatten(arr) {
return arr.reduce(function (flat, toFlatten) {
return flat.concat(Array.isArray(toFlatten) ? flatten(toFlatten) : toFlatten);
}, []);
}
Я попытался добавить IP-адрес к серверу вместо host: 'localhost:9200', но это не имело никакого значения, это все равно не сработало. Я добавил эти строки в свой elasticsearch.yml как на экземпляре сервера, так и на локальном, чтобы разрешить соединение:
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-methods : OPTIONS, HEAD, GET, POST
Я пробовал этот пример с эластичного веб-сайта, и я получаю, что кластер elasticsearch не работает, но не знаю, как его исправить, поэтому я получил правильный ответ:
client.ping({
requestTimeout: 30000,
}, function (error) {
if (error) {
console.error('elasticsearch cluster is down!');
} else {
console.info('All is well');
}
});
Эластичный поиск при беге - 6,2
Спасибо за помощь!



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


предоставьте вывод systemctl status elasticsearch
у меня работает после редактирования /etc/elasticsearch/elasticsearch.yml
http.cors.enabled: true
http.cors.allow-origin: "*"
$ apt-get install elasticsearch-6.2.deb
$ systemctl enable elasticsearch # important
$ systemctl start elasticsearch
root@vis4sense:/bin# systemctl status elasticsearch.service ● elasticsearch.service - Elasticsearch Loaded: loaded (/usr/lib/systemd/system/elasticsearch.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2018-03-28 10:34:58 UTC; 17min ago Docs: http://www.elastic.co Main PID: 1240 (java) Tasks: 86 Memory: 1.7G CPU: 40.343s CGroup: /system.slice/elasticsearch.service └─1240 /usr/bin/java -Xms4g -Xmx4g -Xms1g -Xmx1g -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancysystemctl status elasticsearch.service сейчас включен, но кластер elasticsearch не работает! отклик
да, я сделал systemctl enable elasticsearch.service Synchronizing state of elasticsearch.service with SysV init with /lib/systemd/systemd-sysv-install... Executing /lib/systemd/systemd-sysv-install enable elasticsearch, и я все еще получаю тот же ответ
ответ, который я получаю: `` Не найдена команда 'systemctl', вы имели в виду: команда 'systemctl' из пакета 'systemd' (main) systemctl: команда не найдена, но у меня установлен systemd и т. д. (его ubuntu 16.04) так что я думаю, что что-то не так с моей установкой elasticsearch ??