Я пытаюсь написать фрагмент кода на C ++, чтобы сделать POST на сервере Flexiblesearch. Сервер работает на IP 172.20.1.160, и я могу PUT данных, используя curl, как в учебнике Elasticsearch:
curl -XPUT 'localhost:9200/twitter/tweet/1?op_type=create&pretty' -H 'Content-Type: application/json' -d'
{
«пользователь»: «кимчи»,
«post_date»: «2009-11-15T14: 12: 12»,
«message»: «пробовать Elasticsearch»}
‘
Но когда я пытаюсь сделать что-то похожее с boost ASIO, мое соединение явно отклоняется.
Вот минимальный компилируемый код, показывающий, как я пытаюсь создать соединение и который выдает ошибку:
/// Compiled with:
/// g++ --std=c++14 foo.cpp -lboost_system -lpthread
#include <boost/asio.hpp>
constexpr const char *carbon_port = "2003";
constexpr const char *ES_port = "9200";
constexpr const char *server_ip = "172.20.1.160";int main()
{
boost::asio::io_service io_service;
boost::asio::ip::tcp::resolver resolver(io_service);
boost::asio::ip::tcp::resolver::query query(server_ip, ES_port);
auto endpoint = *resolver.resolve(query);
boost::asio::ip::tcp::socket socket (io_service);
socket.connect(endpoint);
}
Что бы это ни стоило, у меня также есть углеграфитовый сервер, работающий на той же машине, и я могу подключаться и отправлять туда данные по текстовому протоколу, но я не могу установить сокетное соединение сasticsearch, я получаю исключение :
terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::system::system_error> >'
what(): connect: Connection refused
Может ли кто-нибудь объяснить мне, что мне нужно знать, чтобы это работало?
по умолчанию elasticsearch слушает локальный только, если вы хотите, чтобы он слушал все порты, в config/elasticsearch.yml
добавить строку network.host: 0.0.0.0
и перезапустите эластичный поиск.
Других решений пока нет …