Как мы все знаем, Elasticsearch называется ES, который основан на сервере поиска на основе Lucene. Он обеспечивает полнотекстовую поисковую систему распределенной многопользовательской возможности на основе веб-интерфейса Restful. Elasticsearch разрабатывается в Java и выпускается в качестве открытого исходного кода в соответствии с условиями лицензии Apache. В настоящее время это популярная поисковая система на уровне предприятия. Разработанный в облачных вычислениях, он может достичь поиска в реальном времени, стабильности, надежности, быстрой и простых в установке и использовании.
Мы создаем веб -сайт или приложение и добавляем функциональность поиска, но очень трудно создать поисковое задание. Мы хотим, чтобы поисковое решение работало быстро, мы хотим иметь нулевую конфигурацию и совершенно бесплатный режим поиска, мы хотим иметь возможность просто использовать JSON для индекса данных по HTTP, мы хотим, чтобы наш поисковый сервер всегда был доступен, мы хотим иметь возможность начать с одного и масштабировать до сотен, мы хотим поискать в режиме реального времени, мы хотим быть простым мульти-претендентом, мы хотим создать облачное решение. Таким образом, мы используем Elasticsearch для решения всех этих проблем и больше других проблем, которые могут возникнуть.
При использовании ES в Java я просто хочу решить проблему, что скорость запроса недостаточно быстрая, а эффективность недостаточно высока. Единственный запрос данных из базы данных больше не может удовлетворить текущие потребности бизнеса. ХОРОШО! Итак, теперь давайте поговорим о том, как использовать сервер магического поиска ES в Java. Прежде всего, вы должны ссылаться на пакет зависимости ES, а зависимости следующие:
<depervice> <groupid> org.elasticsearch.client </groupid> <artifactid> transport </artifactid> <sersive> 5.5.0 </version> </depervice> <groupid> org.elasticsearch.client </GroupId> <ArtifactId> Transport </artifactid> <sersive> 5.5.0 </ression> </verysendency> <Depective> <groupid> org.elasticsearch </GroupId> <ratifactid> elasticsearch </artifactid> <sersive> 5.5.0 </version> </dependency>
Хорошо, после добавления зависимостей мы входим на этап использования ES. Кстати, есть проблема, которую нужно объяснить. Чтобы использовать ES, вам необходимо установить инструментарий JDK1.8, а Tomcat должен быть версией 7.05 или выше, в противном случае ES не будет поддерживаться, и при интеграции в проект может сообщать об ошибке! , Есть также установка и загрузка ES, вот адрес загрузки: https://www.elastic.co/downloads/elasticsearch
После того, как все будет готово, мы войдем в тот момент, когда мы действительно с нетерпением ждем. Что, да, как искать и запрашивать вещи на сервере ES в Java, позвольте мне раскрыть их один за вами:
Во -первых, мы предлагаем класс инструментов ES
пакет com.osa.utils; импорт java.io.bufferedReader; импорт java.io.ioexception; импорт java.io.inputstreamReader; импорт java.io.printwriter; импорт java.net.url; import java.net.urlConnection; импорт java.net.Urlencoder; импорт. java.util.map; import java.util.set; import org.apache.http.client.clientprotocolexception; import com.alibaba.fastjson.jsonarray; import com.alibaba.fastjson.jsonexception; импорт com.alibaba.fastjson.jsonobject; public class httpsentialtr Указанный URL * * @param URL * URL для отправки запроса * @param param * Параметры запроса, параметры запроса должны быть в форме name1 = value1 & name2 = value2. * @return URL -ответ результат удаленного ресурса, представленного удаленным ресурсом*/ public Static String Sendget (String URL, String Param) {String result = ""; BufferedReader in = null; Попробуйте {string urlnamestring = url + "?" + param; Url Realurl = новый URL (urlnameString); // открыть соединение между URL -URLConnection Connection = Realurl.Openconnection (); // Установить атрибут общего запроса connection.setRequestProperty ("Accept", "*/*"); Connection.SetRequestProperty («Connection», «Keep-Alive»); Connection.SetRequestProperty («Пользовательский агент», «Mozilla/4.0 (совместимый; MSIE 6.0; Windows NT 5.1; SV1)»); // Создать фактическое соединение соединения. Connect (); // Получить все поля заголовка ответа <String, list <string >> map = connection.getheaderfields (); // Переносить все поля заголовка ответа для (String Key: map.keyset ()) {System.out.println (key + "--->" + map.get (key)); } // Определите входной поток BufferedReader, чтобы считать ответ URL в = новый BufferedReader (New InputStreamReader (connection.getInputStream ())); Строка; while ((line = in.readline ())! = null) {result += line; }} catch (Exception e) {System.out.println ("Исключение произошло при отправке запроса GET!" + E); e.printstacktrace (); } // Используйте наконец -то блок, чтобы закрыть поток ввода, наконец, {try {if (in! = Null) {in.close (); }} catch (Exception e2) {e2.printstackTrace (); }} return result; } /** * Отправить запрос на указанный URL * @param url * URL для отправки запроса * @param param * parameter запроса, параметр запроса должен быть в форме name1 = value1 & name2 = value2. * @return ответа результаты удаленного ресурса, представленного */ public Static String SendPost (string url, string param) {printWriter out = null; BufferedReader in = null; String result = ""; try {url Realurl = новый URL (URL); // открыть соединение между urlConnection conn = Realurl.openconcenection (); // Установить атрибут общего запроса conn.setrequestproperty ("Accept", "*/*"); conn.setrequestproperty («connection», «Keep-alive»); conn.setrequestproperty («Пользовательский агент», «Mozilla/4.0 (совместимый; msie 6.0; Windows NT 5.1; Sv1)»); // Чтобы отправить запрос сообщения, вы должны установить следующие две строки в conn.setDoOutput (true); conn.setDoinput (true); // Получить выходной поток, соответствующий объекту urlconnection = new PrintWriter (conn.getOutputStream ()); // Отправить параметр запроса out.print (param); // Buffer Out.flush () выводного потока промывки; // Определите входной поток BufferedReader, чтобы считать ответ URL в = новый BufferedReader (новый inputStreamReader (conn.getInputStream ())); Строка; while ((line = in.readline ())! = null) {result += line; }} catch (Exception e) {System.out.println ("Исключение произошло при отправке запроса поста!" +e); e.printstacktrace (); } // Используйте наконец -то блоки, чтобы закрыть выходной поток и наконец входного потока {try {if (out! = Null) {out.close (); } if (in! = null) {in.close (); }} catch (ioException ex) {ex.printStackTrace (); }} return result; }} После того, как класс инструментов доступен, вы можете увидеть, что есть два метода отправки запросов, один из них - это методы Sendget и Sendpost. Два метода могут быть выбраны на основе их собственного выбора. Конечно, это всего лишь метод отправки запросов. Как их позвонить? Здесь, поскольку мы запрашиваем ES, нет необходимости использовать Mybatis или Hibernate Frameworks. Вы можете определить SQL самостоятельно в уровне данных, а затем использовать SQL, чтобы вызвать метод SendGet/SendPost через предыдущий класс инструментов, следующим образом:
String sql = urlencoder.encode ("select * from table"); метод кодирования в основном удаляет некоторые пространства в SQL
String result = httpsentutils.sendget ("http://221.124.71.8:9200/_sql", "sql ="+sql); Порт IP Plus может быть настроен при установке
ХОРОШО! Как правило, если отправка успешна в это время, данные в ES могут быть получены. Поскольку возвращенные данные JSON в ES, мы форматируем строку JSON.
net.sf.json.jsonobject jsonobject = net.sf.json.jsonobject.fromobject (result); // Установите Hits Tag net.sf.json.jsonobject hitsjsonobject = jsonobject.getjsonObject ("Hits"); После получения данных делается вывод, что это бизнес -операции. Это почти здесь.
Выше приведено некоторые операции запроса, так что мы должны делать, если нам нужно вставить данные в ES? Привести пример
пакет com.sojson.core.elasticsearch.manager; import java.util.arraylist; import java.util.hashmap; import java.util.list; import java.util.map; импорт net.sf.json.jsonobject; import org.elasticsearch.action.bulk.bulkrequestbuilder; org.elasticsearch.action.bulk.bulkresponse; import org.elasticsearch.action.index.indexRequestBuilder; import com.sojson.common.utils.stringutils; import com.sojson.core.lasticsearch.utils.estils; paramexersexmex*indexextex*@waterexex*@@@@@@@@@@@sampexex@@@@@@@waterexexeex@@@@@warmesexexeex@@warmesexexe Введите*@param idname id name*@param json. Хранитованный JSON может принять карту*@return*/publicstaticmapsave (String Index, String Type, String idname, jsonobject json) {list list = newarraylist (); list.add (json); return save (index, type, idname, list);};};};};}; Проведенные параметры обрабатываются и называются методом сохранения для выполнения операции вставки
/*** Добавить данные в ElasticSearch*@param index index*@param type type*@param idname id name*@@param listdata Коллекция объектов*@return*/@spistresswarnings ("unchecked") publicstaticmapsave (string index, string, string idname, listdata) {bulkrequestbuilder bulkrequest = Estools.client.preparebulk (). SetRefresh (true); map resultmap = newhashmap (); for (объект объекта: listdata) {jsonObject json = jsonObject.fromObject (Object); // no IdName не указано, затем позволить ElasticSearch автоматически генерировать. If (stringUtils.isblank (idname)) {indexRequestBuilder lrb = elasticSearchUtils.client .prepareIndex (index, type) .setsource (json); Bulkrequest.Add (lrb); // ElasticSearchUtils - это класс инструмента, который является конфигурацией с некоторой конфигурацией eS -infortue {String Arestue restue {String Arestue restue {String Areshure. json.optstring (idname); indexRequestbuilder lrb = estools.client.prepareIndex (index, type, idvalue) .setsource (json); bulkrequest.add (lrb);}} bulkresponse bulkresponse = bulkrequest.execute ().. actionget (); if (bulkresponse.hasfailures ()) {// Ошибка процессов путем итерации через каждый объемный ответ electionystem.out.println (bulkresponse.getitems (). tostring ()); rolcemap.put ("500", "Сохранить ES не удалось!"); resultMap;} bulkrequest = estools.client.preparebulk (); resultmap.put ("200", "Сохранить ES успешно!"); return resultmap;}} Elasticsearchutils Class
Общедоступный класс ElasticSearchUtils {Private Static Final String Cluster_Name = "cluster.name"; частная статическая конечная строка es_ip = "es.ip"; частная статическая конечная строка es_port = "esport"; private Static Settings; Private Static Client Client; public getEsclient () Throws insignhostexception {настройки = Settings.builder().put(CLUSTER_NAME,ConfigUtils.getConfig(CLUSTER_NAME)).build();if(client != null){client = new PreBuiltTransportClient(settings).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(ConfigUtils.getConfig(ES_IP)), Integer.parseint (configutils.getConfig (es_port)));} return Client;} Вышеуказанное - операция вставки. Хорошо, это все для сегодняшнего резюме. Я надеюсь, что это может принести вам небольшую помощь, и я надеюсь, что вы сможете поддержать Wulin.com больше.