Системная среда: centos 7.2 в соответствии с VM12
Текущая установленная версия: Elasticsearch-2.4.0.tar.gz
Java Operation ES Cluster Шаги 1: Настройка информации объекта кластера; 2: создать клиент; 3: Посмотреть информацию о кластере
1: имя кластера
Имя кластера по умолчанию - Elasticsearch. Если имя кластера несовместимо с указанной, будет сообщена об ошибке при использовании ресурсов узлов.
2: Функция обнюхивания
Запустите функцию SNIFF через client.transport.sniff, чтобы вам нужно было только указать узел в кластере (не обязательно главный узел), а затем загрузите другие узлы в кластере. Таким образом, до тех пор, пока программа продолжает закрываться, вы все равно можете подключаться к другим узлам, даже если этот узел падает.
3: тип запроса searchtype.query_then_fetch
В запросе есть 4 типа типов запросов
Query_and_fetch:
Мастер -узел распределяет запрос на запрос на все осколки. Каждый осколок отсортирован и отсортирован в соответствии с его собственными правилами запроса, а именно частотой документа с частотой слов, а затем возвращает результат в мастер -узел. Мастер -узел суммирует и сортирует все данные и возвращает их клиенту. Этот метод требует взаимодействия с ES только один раз.
Этот метод запроса имеет проблемы с объемом данных и сортировкой. Основной узел будет суммировать данные, возвращаемые всеми осколками, так что объем данных будет относительно большим. Во -вторых, правила каждого осколка могут быть непоследовательными.
Query_then_fetch:
Мастер -узел распределяет запрос на все осколки. После того, как каждый осколок отсортируется, идентификатор и оценка данных возвращаются в главный узел. После получения его мастер -узел суммирует и сортирует его, а затем считывает соответствующие данные в соответствующий узел в соответствии с сортированным идентификатором и возвращает их клиенту. Этот метод требует взаимодействия с ES дважды.
Этот метод решает проблему объема данных, но проблема сортировки все еще существует и является методом запроса по умолчанию ES
Def_query_and_fetch: и dfs_query_then_fetch:
Объединить правила каждого осколка для оценки. Решен проблемой сортировки, но DFS_QUERY_AND_FETCH по -прежнему имеет проблемы с объемом данных, DFS_QUERY_THEN_FETCH имеет лучшую проблему, но эффективность является худшей.
1. Получить клиента, два способа получить
@Before public void до () throws exception {map <string, string> map = new hashmap <string, string> (); map.put ("cluster.name", "elasticsearch_wenbronk"); Настройки. Настройки настройки = настройки.builder (). PUT (MAP); client = transportClient.builder (). Настройки (Настройки) .Build () .AdTransportAddress (новый inetSocketTransPortAddress (inetAddress.getByName ("www.wenbronk.com"), integer.parseint ("9300"))); } @Before public voide) Throws Exception {// Создание клиента, используйте имя кластера по умолчанию, "Elasticsearch" // client = transportClient.builder (). Build () // .AddTransportAddress (newNetSocketCocketTransPortAddress (inetAddress.getbyName ("wwww.wenbronk.com"); 9300); // Укажите информацию о конфигурации кластера через объект «Настройки» и настроенный имени кластера настройки = настройки. STECTTITIONSBUILDER (). PUT ("cluster.name", "Elasticsearch_wenbronk") // Установить имя кластера // .put ("client.transport.sniff", true) // Включение Sniff, это не будет подключено. .put ("network.host", "192.168.50.37") .put ("client.transport.ignore_cluster_name", true) // Игнорировать проверку имени кластера и может подключиться к имени кластера, если имя кластера неверно после открытия //. .put ("client.transport.ping_timeout", 5) // Сообщить об ошибке, время ожидания Ping, .build (); client = transportClient.builder (). Настройки (Настройки) .build () .AddTransportAddress (New InetSocketTransPortAddress (New InetSocketAddress ("192.168.50.37", 9300))); // по умолчанию 5S // Сколько времени требуется, чтобы открыть соединение, по умолчанию 5S System.out.println («Успешное соединение»); }PS: два метода, данные официальным веб -сайтом, не могут быть использованы, их нужно объединить, чтобы использовать их, и я трачу свой день ...
Значение других параметров:
Код:
пакет com.wenbronk.javaes; import java.net.inetadress; import java.net.inetsocketAddress; import java.util.date; импорт java.util.hashmap; import java.util.list; import java.til.map; import java.utl.concurrent.timeunit; org.elasticsearch.action.bulk.backoffpolicy; import org.elasticsearch.action.bulk.bulkprocessor; import org.elasticsearch.action.bulk.bulkprocessor.listener; import org.elasticsearch.action.bulk.bulkrequest; importasticsearch.action.bulkes. org.elasticsearch.action.bulk.bulkresponse; import org.elasticsearch.action.delete.deleteRequest; import org.elasticsearch.action.delete.deleterSponse; import org.elasticsearch.action.get.getResponse; импорт org.elasticsearch.get.gultigetemresponse; org.elasticsearch.action.get.multigetresponse; import org.elasticsearch.action.index.indexRequest; import org.elasticsearch.action.index.indexresponse; import org.elasticsearch.action.update.updateresponse; org.elasticsearch.client.transport.transportClient; Import org.elasticsearch.cluster.node.discoverynode; import org.elasticsearch.common.settings.settings; import org.elasticsearch.common.transport.inetsockecoletransportdress; import.elasticsearch.common.Unit.BytesIsIt org.elasticsearch.common.unit.bytesizevalue; import org.elasticsearch.common.unit.timevalue; import org.elasticsearch.common.xcontent.xcontentbuilder; import org.elasticsearch.common.xcontent.xcontentface; importasticsearch.script.script.Script.Script.Script.Script.jiT org.junit.test; import com.alibaba.fastjson.jsonobject;/** * Используйте Java API для эксплуатации ElasticSearch * * @author 231 * */public class javaestest {private TransportClient Client; Частный источник IndexRequest; /*** Получить соединение, первое место* @Throws Exception* /// @before public void перед () throws exception {map <string, string> map = new hashmap <string, string> (); map.put ("cluster.name", "elasticsearch_wenbronk"); Настройки. Настройки настройки = настройки.builder (). PUT (MAP); client = transportClient.builder (). Настройки (Настройки) .Build () .AdTransportAddress (новый inetSocketTransPortAddress (inetAddress.getByName ("www.wenbronk.com"), integer.parseint ("9300"))); }/ *** Просмотреть информацию о кластере*/ @test public void testinfo () {list <DiscoveryNode> nodes = client.connectednodes (); for (discoverynode node: узлы) {system.out.println (node.gethostaddress ()); }}/*** Организовать строки json, метод 1, непосредственно сплайсинг*/public String createJson1 () {string json = "{" + "/"/":/" kimchy/"," + "/" postdate/":/" 2013-01-30/"," + "/" "/" ", пытаясь Elasticsearch/" + "/"/"/" ":/" ". вернуть json; } / ** * Создать json с помощью карты * / public map <string, object> createjson2 () {map <string, object> json = new hashmap <string, object> (); json.put («Пользователь», "kimchy"); json.put ("postdate", new Date ()); json.put («Сообщение», «Пробуя Elasticsearch»); вернуть json; } / *** Создание с использованием fastjson* / public jsonObject createJson3 () {jsonObject json = new jsonObject (); json.put («Пользователь», "kimchy"); json.put ("postdate", new Date ()); json.put («Сообщение», «Пробуя Elasticsearch»); вернуть json; } / *** Используйте ES Help Class* / public xContentBuilder CreateJson4 () Throws Exception {// Создание объекта JSON, один из способов создания json xcontentbuilder source = xcontentfactory.jsonbuilder () .StartObject (). Field («Пользователь», «kimchy»). Elasticsearch ") .endobject (); источник возврата; } / *** Сохранить в индексе* @Throws Exception* / @Test public void test1 () Throws Exception {xcontentBuilder source = createJson4 (); // хранить json в index indexresponse response = client.prepareindex («Twitter», «твит», «1»). SetSource (source) .get (); // // Результат получен строковым index = response.getIndex (); String type = response.getType (); String id = response.getid (); длинная версия = response.getVersion (); Boolean Creation = response.iscreated (); System.out.println (index + ":" + type + ":" + id + ":" + version + ":" + centure); }/ *** Получить API Получить указанную информацию о документе*/ @test public void testget () {// getResponse response = client.prepareget ("Twitter", "твит", "1") // .get (); GetResponse response = client.prepareget ("Twitter", "твит", "1") .setoperationThreaded (false) // Thread Safe.get (); System.out.println (response.getSourCeasString ()); } / ** * Тест Удалить API * / @test public void testDelete () {deleter -response = client.preparedelete ("Twitter", "твит", "1") .get (); String Index = response.getIndex (); String type = response.getType (); String id = response.getid (); длинная версия = response.getVersion (); System.out.println (index + ":" + type + ":" + id + ":" + version); } / ** * Обновление обновления теста API * Использовать объект UpdateRequest * @Throws Exception * / @Test public void testupDate () Throws exception {updateRequest updateRequest = new UpdateRequest (); UpdateRequest.index ("Twitter"); UpdateRequest.type ("твит"); UpdateRequest.id ("1"); UpdateRequest.doc (xcontentFactory.jsonBuilder () .StartObject () // Добавить поля, которые не существуют, замените существующие Fields.field («Пол», «Мужчина») .Field («Сообщение», «Привет») .endObject ()); Updater -response = client.update (UpdateRequest) .get (); // Печать строки index = response.getIndex (); String type = response.getType (); String id = response.getid (); длинная версия = response.getVersion (); System.out.println (index + ":" + type + ":" + id + ":" + version); }/** * Проверьте обновление API, используйте клиент * @trows Exception */@test public void testupDate2 () throws Exception {// Обновлено с помощью объекта сценария // updater -response = client.prepareupdate ("Twitter", "Tweet", "1") // .setScript (new Script ("hits._source.gender =") "); // updater -response = client.prepareupdate ("Twitter", "твит", "1") // .setdoc (xcontentfactory.jsonbuilder () // .startobject () // .field («Пол», «Малелелеле») // .endobject ()). Get (); // Использование объекта UpdateRequest и Script // updateRequest updateRequest = new UpdateRequest ("Twitter", "твит", "1") // .script (новый скрипт ("ctx._source.gender =/" male/"")); // updateResponse response = client.update (updateRequest) .get (); // updateResponse response = client.update (новый UpdateRequest ("Twitter", "твит", "1") .doc (xcontentFactory.jsonbuilder () .StartObject () .Field («Пол», «Мужчина») .endObject ()). Get (); System.out.println (response.getIndex ()); }/** * Обновление тестирования * Использовать updateRequest * @Throws Exception * @Throws прерывание. Updater -response = client.update (UpdateRequest) .get (); } / ** * Тестный метод Upsert * @Throws Exception * * / @Test public void testupSert () Throws Exception {// Установить условия запроса, добавить эффективный indexRequest indexRequest = new IndexRequest («Twitter», «Tweet», «2»). .field («пол», "gfrerq") .endobject ()); // Установить обновление, найти настройки обновления ниже UpdateRequest upsert = new UpdateRequest («Twitter», «твит», «2») .doc (xcontentfactory.jsonbuilder () .startObject () .field («пользователь», «wenbronk») .endobject () .Upsert (indexRequest); client.update (upsert) .get (); } / ** * Проверьте многочисленное at api * GET из разных индексов, типа и идентификатора * / @test public void testmultiget () {MultiGetrespons MultiGetResponse = client.prepareMultiget () .Add («Twitter», «Tweet», «1») .Add («Twitter», «Tweet», «2», «3», «4» («Twitter», «Tweet», «2», «3». «Тип», «foo») .get (); для (MultieGetIteMresponse itemResponse: MultiGetResponse) {getResponse response = itemResponse.getResponse (); if (response.isexists ()) {string sourceasString = response.getSourCeasString (); System.out.println (SourceasString); }}} / *** Выполнение объемного пакета* запрос может быть обновлен или удалить несколько документов* / @test public void testbulk () Throws Exception {bulkrequestbuilder bulkrequest = client.preparebulk (); bulkrequest.add (client.prepareindex («Twitter», «твит», «1») .setsource (xcontentfactory.jsonbuilder () .startobject () .field («Пользователь», «kimchy») .field («postdate», новая дата () .field («Сообщение», Elasticsearkegegebject). bulkrequest.add (client.prepareindex («Twitter», «твит», «2») .setsource (xcontentfactory.jsonbuilder () .startobject () .field («Пользователь», «kimchy») .field («postdate», новая дата () .field («Сообщение», «Другое сообщение»). Ответ BulkResponse = bulkrequest.get (); System.out.println (response.getheaders ()); } / ** * Используйте объемный процессор * @Throws Exception * / @Test public void testbulkProcessor () Throws Exception {// Создать Bulkporcessor obj method stub } // Execute public void afterBulk(long paramLong, BulkRequest paramBulkRequest, Throwable paramThrowable) { // TODO Auto-generated method stub } public void afterBulk(long paramLong, BulkRequest paramBulkRequest, BulkResponse paramBulkResponse) { // TODO Auto-generated method stub } }) // 1W Запросы на выполнение объемного .setbulkactions (10000) // 1 ГБ обновления данных. Setbulksize (New BytesizeValue (1, BytesizeUnit.gb)) // Фиксированные 5s должны быть обновлены один одновременно.setConcurrentRequests (1) // set назад, выполнить после 100 мс, максимальный 3 запроса.setbackOffPolicy (backOffPolicy.ExponentialBackoff (TimeValue.TimeValueMillis (100), 3)) .build (); // Добавить один запрос bulkprocessor.add (new IndexRequest ("Twitter", "твит", "1")); bulkprocessor.add (new DeleteRequest ("Twitter", "твит", "2")); // close bulkprocessor.awaitclose (10, TimeUnit.minutes); // или bulkprocessor.close (); }} Код TES2:
пакет com.wenbronk.javaes; import java.net.inetsocketaddress; import org.apache.lucene.queryparser.xml.filterbuilderfactory; import org.elasticsearch.action.search.multisearchresponse; import ourg.Action.search.search.search.search.search.search.search. org.elasticsearch.action.search.searchresponse; import org.elasticsearch.action.search.searchtype; import org.elasticsearch.client.transport.transportClient; import org.elasticsearch.common.settings.settings; import.elasticsearch.common.settings.ses.builder; org.elasticsearch.common.transport.inetsocketTransportAddress; import org.elasticsearch.common.unit.timevalue; import org.elasticsearch.index.query.querybuilder; import org.elasticsearch.index.query.querybuilders; importasticsearch.search.search. org.elasticsearch.search.aggregations.aggregation; Import org.elasticsearch.search.aggregations.aggregations.aggregationsbuilders; import org.elasticsearch.search.aggregations.bucket.histogram.datehistograminterval; импорт org.elasticsearch.search.sort.sortorder; org.elasticsearch.search.sort.sortparseelement; import org.junit.fore; import org.junit.test;/** * Используйте Java API для эксплуатации ElasticSearch * Поиск API * @author 231 * */public javaestest2 {privateclient; / *** Получить клиент -объект*/ @before public void testfore () {builder builder = settings.settingsbuilder (); builder.put ("cluster.name", "wenbronk_escluster"); // .put ("client.transport.ignore_cluster_name", true); Настройки настроек = Builder.Build (); org.elasticsearch.client.transport.transportClient.Builder TransportBuild = TransportClient.Build (); TransportClient Client1 = TransportBuild.Settings (настроек) .build (); client = client1.addtransportAddress ((New InetSocketTransPortAddress (New InetSocketAddress ("192.168.50.37", 9300))))); System.out.println («Успех подключиться к Escluster»); }/*** Тестовый запрос*/@test public void testsearch () {// searchRequestbuilder searchRequestbuilder = client.preparesearch ("Twitter", "твит", "1"); // searchrespons .setSearchType (searchtype.dfs_query_then_fetch) // .setQuery (QueryBuilders.termerquery («Пользователь», «Тест»)) // .setPostfilter (QueryBuilders.RangeQuery («Возраст»). Из (0). .execute (). Actionget (); Searchresponse response = client.preparesearch () .execute (). Actionget (); // searchhits hits = response.gethits (); // for (searchhit searchhit: hits) {// for (iterator <searchhitfield> iterator = searchhit.iterator (); iterator.hasnext ();) iterThiT. System.out.println (next.getValues ()); //} //} system.out.println (response); } / *** Проверка прокрутки API* Более эффективная обработка больших объемов данных* / @test public void testscrolls () {QueryBuilder QueryBuilder = QueryBuilders.Termquery («Twitter», «Tweet»); Searchresponse response = client.preparesearch ("Twitter") .AddSort (sortParseElement.doc_field_name, sortorder.asc) .setscroll (new TimeValue (60000)) .SetQuery (QueryBuilder) .setSize (100) .exeCute (). ActionGet (); while (true) {for (searchhit hit: response.gethits (). gethits ()) {System.out.println («Я приеду»); } Searchresponse response2 = client.preparesearchscroll (response.getscrollid ()) .setscroll (new TimeValue (60000)). Execute (). Actionget (); if (response2.gethits (). gethits (). Length == 0) {System.out.println ("Oh no ======"); перерыв; }}} / ** * Тест MultiSearch * / @test public void testmultisearch () {QueryBuilder QB1 = QueryBuilders.QueryStringQuery ("ElasticSearch"); SearchRequestBuilder requestBuilder1 = client.preparesearch (). SetQuery (QB1) .SetSize (1); QueryBuilder QB2 = QueryBuilders.matchQuery («Пользователь», «Qimchy»); SearchRequestBuilder requestBuilder2 = client.preparesearch (). SetQuery (QB2) .SetSize (1); MultiSearchResponse multiResponse = client.prepareMultisearch (). Add (requestBuilder1) .Add (requestBuilder2) .execute (). Actionget (); Long nbhits = 0; for (multiSearchResponse.item Item: multiResponse.getResponse ()) {searchResponse response = item.getResponse (); nbhits = response.gethits (). getTotalHits (); Searchhit [] hits = response.gethits (). Gethits (); System.out.println (nbhits); }} / *** Запрос агрегации теста* / @test public void testaggration () {searchresponse response = client.preparesearch () .setquery (querybuilders.matchallquery ()) // Первое использование запроса для фильтрации поля. .Addaggregation (агрегация Builders.datehistogram ("agg2"). Field ("Рождение") .Interval (dateHistogramInterval.year)) .exeCute (). ActionGet (); Агрегация агрегации2 = response.getAggregations (). Get ("term"); Агрегация агрегации = response.getAggregations (). Get ("agg2"); // searchresponse response2 = client.search (new SearchRequest (). } / ** * Тест прекратить * / @test public void testmerminateefater () {searchresponse response = client.preparesearch ("Twitter"). SettmiMateefter (1000) .get (); if (response.isterminateearly ()) {System.out.println ("ternimate"); }} /** * Запрос фильтра: больше, чем gt, меньше, чем LT, меньше или равна LTE, больше, чем или равна gte * /@test public void testfilter () {searchresponse response = client.preparesearch ("Twitter") .settypes ("") .Setquery (queryBuilders.matcherquer .setSearchType (searchtype.query_then_fetch) // .setpostfilter (filterBuilders.rangeFilter ("age"). от (0) .to (19) // .includelow .rangeFilter («Возраст»). gte (18) .lte (22)) .setExplain (true) // Объяснение верно, чтобы указать, что рейтинг сортируется в соответствии с актуальностью данных, а самое высокое подходящее ключевое слово находится впереди. Get (); } / *** Групповой запрос* / @test public void testgroupby () {client.preparesearch ("Twitter"). Settypes ("твит") .setQuery (QueryBuilders.matchallQuery ()) .setSearchType (searchType.query_then_fetch). .Field ("пользователь"). Размер (0) // Группа в соответствии с пользователем // размер (0) также 10) .get (); }}Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.