elasticsearch - 休憩クライアント

https://www.jianshu.com/p/66b91bec12e3

 

elasticsearch - 休憩クライアント

0.2372018.05.10 15時23分03秒1287 8223個の言葉を読んで

高速で反復バージョン、プロジェクトで使用5.Xバージョン、新しい休憩クライアントを使用してJavaクライアントをelasticsearch。オンライン主にクライアントまたはのtransportClient。唯一の自分の研究休憩クライアントの下で、パッケージのビジネス要件を満たしていないグループをEsClient。残りのクライアントは、将来のリリースでは、廃棄物をのtransportClient、推奨されます。APIの新バージョンでは、多くは、変更名前を変更したり、場所を変更しました。

ここに中国の文書をelasticsearch5.6のJava残りのクライアントを提供しますhttps://legacy.gitbook.com/book/quanke/elasticsearch-java-rest/detailsをこの記事では、単純なアプリケーションで、詳細については、このドキュメントを参照してください。

入門

Javaの残りのクライアントは、2つのカテゴリ、すなわちRestClientとRestHighLevelClientを実施しています。前者はelasticsearchクラスタとHTTP経由で通信し、負荷分散、フェイルオーバー、永続リンクを行うことができ、自動的にすべてのelasticsearchバージョンをサポートしながら、クラスタノードと他の機能を発見するが、独自の要求を必要とし、適切なエンコードを行う低レベルのクライアントであります前処理コーデックのtransportClientを必要としないパッケージの差に高度なクライアント、付加および欠失である、しかし、相溶性、クラスタと要求のクライアントバージョンと、デコード(JSONを書き込みます)。
RestClientが悪いCRUDを提供していないので、あなただけの、一般的に満たすことができない場合のRestHighLevelClientでのみ使用され、あまり使用し、自分のJSONと選抜方法のHttp要求が実現されます書くことができます。これはRestHighLevelClientを紹介します。

RestHighLevelClient

RestHighLevelClient restHighLevelClient = new RestHighLevelClient(restClient);
のみRestClinetのパッケージにRestHighLevelClient。これは、非同期要求をサポートしています。

検索API

リクエスト

SearchRequestとSearchSourceBuilder:クエリを作成すると、2つの主なカテゴリを使用しています。

SearchRequest searchRequest = new SearchRequest(); //穿件SeachRequest,Without arguments this runs against all indices.
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();// 大多数的搜索参数被添加到 SearchSourceBuilder 。它为每个进入请求体的每个东西都提供 setter 方法。
searchSourceBuilder.query(QueryBuilders.matchAllQuery()); // 添加一个 match_all 查询到 searchSourceBuilder 。
searchRequest.source(searchSourceBuilder); //将searchSourceBuilder添加到searchRequest

ここでは、クエリ要求を構築し、コンテンツはmatch_allクエリです。
SearchRequestクエリ最終パッケージの要求が、クエリSearchSourceBuilderで指定された詳細のほとんど。
まず、いくつかの一般的な方法を見てSearchRequest

SearchRequest searchRequest = new SearchRequest("posts"); // 限制请求到某个索引上
searchRequest.indices("gets"); //设定索引
searchRequest.types("doc"); // 限制请求的类别

パッケージ要求ES-Javaでボディパッケージクラス、プロパティのsetterメソッドとgetterメソッド、ノー対応するセットとラベルを取得、直接その後、パラメータと戻り値はゲッターであるセッターである区別するために、メソッド名としてプロパティ名を使用します。クライアント(少なくとも5.Xで)以前のバージョンでは標準のセッターとゲッターと消えてしまいました。

他の多くの設定パラメータは、もはやリストされている、ありません。

そして、--SearchSourceBuilder検索詳細
SearchSourceBuilderは、検索の詳細については、以下のいくつかの例、詳細なリファレンスドキュメントのほとんどを設定できます。

SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); //使用默认选项创建 SearchSourceBuilder 。 sourceBuilder.query(QueryBuilders.termQuery("user", "kimchy"));//设置查询对象。可以使任何类型的 QueryBuilder sourceBuilder.from(0); //设置from选项,确定要开始搜索的结果索引。 默认为0。 sourceBuilder.size(5); //设置大小选项,确定要返回的搜索匹配数。 默认为10。 sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS)); //设置一个可选的超时时间,用于控制搜索允许的时间。 

sourceBuilder.query:クエリオブジェクトを設定します。すべてのクエリDSLサポートされている検索タイプは、対応するQueryBuilderを持っています。二つの方法で作成したQueryBuilder:ダイレクトとQueryBuilders新しいファクトリメソッドは、私は(実際には何の違い)、後者を使用していません。共通QueryBuilderいくつかの列:

// 创建一个字段“user”与文本“kimchy”相匹配的的全文匹配查询。
MatchQueryBuilder matchQueryBuilder = new MatchQueryBuilder("user", "kimchy");
// 创建一个字段date的范围查询。
RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("date").lte(time);

チェーン作成および初期化をサポートしながら各QueryBuilderは、その問い合わせに応じて対応する方法を提供します。
QueryBuilderサポートはカールのように、このようなブール値で必須のブールセットとしてネストされたクエリのように、ブール値に範囲を置く必要があります。
どんなに入れ子にどのように、同じ従来の検索JSONのような結果QueryBuilder構造。最後に、でSearchSourceBuilder QueryBuilderにこれを追加します。

searchSourceBuilder.query(queryBuilder);

各SearchSourceBuilderだけQueryBuilderを設定、つまりクエリDSLは、唯一のquery要素です。

従来のクエリDSLにおいては、そのような並べ替えのような並列構造でクエリといくつかは、Javaで次の

FieldSortBuilder sortBuilder = SortBuilders.fieldSort(sortField).order(sortOrder);
searchSourceBuilder.sort(sortBuilder);

一つは、文書の数が返される文書の戻りフィールドを制御することができます。

searchSourceBuilder.size(num);
searchSourceBuilder.fetchSource(includeFields, excludeFields); 

ハイライト表示を達成:

SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
HighlightBuilder highlightBuilder = new HighlightBuilder(); //创建一个HighlightBuilder
HighlightBuilder.Field highlightTitle =new HighlightBuilder.Field("title"); //指定高亮字段1
highlightBuilder.field(highlightTitle); //指定高亮字段2
highlightBuilder.preTags(preTags); //修改高亮前缀(默认http标签)
highlightBuilder.postTags(postTags); //修改高亮后缀(默认http标签)
searchSourceBuilder.highlighter(highlightBuilder);

そして、テキストフィールドには、結果から強調表示を取得することができます。

集約グループ:

SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
TermsAggregationBuilder aggregation = AggregationBuilders.terms("by_company").field("company.keyword");
aggregation.subAggregation(AggregationBuilders.avg("average_age").field("age"));
searchSourceBuilder.aggregation(aggregation);

詳細は、重合APIを参照します。

応答
SearchResponse searchResponse = client.search(searchRequest);

すべてのデータは、それぞれのSearchResponseを経て得られました。

リクエストが適切であるかどうか、我々は形式、それを行うには層ごとに従うためにすべての必要性を構築またはDSL解決したいと思います。

文書が返されるトラバースすることができます:

SearchHits hits = searchResponse.getHits(); //获得hits数组 long totalHits = hits.getTotalHits(); //获取检索的文档总数(不是这次返回的数量) for (SearchHit hit : hits) { String index = hit.getIndex(); //获取文档的index String type = hit.getType(); //获取文档的type String id = hit.getId(); //获取文档的id Map<String, Object> sourceMap = hit.getSource(); //获取文档内容,封装为map String sourceString = hit.getSourceAsString(); //获取文档内容,转换为json字符串。 } 

ここでトラバーサル、公式の使用

SearchHit[] searchHits = hits.getHits();
for (SearchHit hit : searchHits) {
    // do something with the SearchHit
}

実際のSearchHitsでのIterableインターフェイスを実装し、あなたが直接反復することができます。
ヒットソース以外の分野に加えて、さらに例を強調するために、取得することができます。

Map<String, HighlightField> highlightFields = hit.getHighlightFields(); HighlightField highlight = highlightFields.get("title"); //获取该title领域 的突出显示 Text[] fragments = highlight.fragments(); //获取包含突出显示的字段内容的一个或多个片段 String fragmentString = fragments[0].string(); 

重合におけるヒットは、その後、SearchResponse集計のからオブジェクトを取得する必要がありません。

Aggregations aggregations = searchResponse.getAggregations(); Terms byCompanyAggregation = aggregations.get("by_company"); //Get the by_company terms aggregation Bucket elasticBucket = byCompanyAggregation.getBucketByKey("Elastic"); // Avg averageAge = elasticBucket.getAggregations().get("average_age"); //Get the average_age sub-aggregation from that bucket double avg = averageAge.getValue(); 

その他には、公式のAPIを参照してください。

カーソル

簡単な紹介に続いて、カーソル5.Xバージョンも前から異なっている使用します。

final Scroll scroll = new Scroll(TimeValue.timeValueMinutes(1L)); // 创建游标对象 SearchRequest searchRequest = new SearchRequest("posts"); searchRequest.scroll(scroll); // 为查询设置游标,注意是在SearchRequest中配置 SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); searchSourceBuilder.query(matchQuery("title", "Elasticsearch")); searchRequest.source(searchSourceBuilder); SearchResponse searchResponse = client.search(searchRequest); //通过发送初始化 SearchRequest 来初始化搜索上下文 String scrollId = searchResponse.getScrollId(); // 获取scrollId SearchHit[] searchHits = searchResponse.getHits().getHits(); while (searchHits != null && searchHits.length > 0) { //在一个循环中通过调用 Search Scroll api 检索所有搜索命中结果,知道没有文档返回为止。 //创建一个新的SearchScrollRequest,持有最近一次返回的滚动标识符和滚动间隔 SearchScrollRequest scrollRequest = new SearchScrollRequest(scrollId); scrollRequest.scroll(scroll); //重新设置游标ID searchResponse = client.searchScroll(scrollRequest); //游标查询,这里使用searchScroll,与第一次查询不同 scrollId = searchResponse.getScrollId(); //获取新的游标ID searchHits = searchResponse.getHits().getHits(); //处理返回的搜索结果 } ClearScrollRequest clearScrollRequest = new ClearScrollRequest(); //一旦查询全部完成,清除游标 clearScrollRequest.addScrollId(scrollId); ClearScrollResponse clearScrollResponse = client.clearScroll(clearScrollRequest); boolean succeeded = clearScrollResponse.isSucceeded(); 

APIを削除

RestHighLevelClientでは、インデックスのみ/種類/ IDに基づいて正確なサポートを削除、削除、クエリ操作で削除はサポートされていません。通常のtransportClientサポートクエリで削除します。

DeleteRequest request = new DeleteRequest(indexName, type, id); //创建DeleteRequest对象 DeleteResponse response = client.delete(request); //执行删除操作 

これらの三つの値に加えてDeleteRequest、多くのオプションのパラメータがあります。

request.routing("routing"); // 路由值 request.parent("parent"); //Parent 值 request.timeout(TimeValue.timeValueMinutes(2)); // TimeValue 类型的等待主分片可用的超时时间 request.timeout("2m"); // 字符串类型的等待主分片可用的超时时间 request.setRefreshPolicy(WriteRequest.RefreshPolicy.WAIT_UNTIL);// Refresh policy as a WriteRequest.RefreshPolicy instance request.setRefreshPolicy("wait_for"); // Refresh policy as a String request.version(2); // Version request.versionType(VersionType.EXTERNAL); // Version type 

DeleteResponseそれぞれの演算結果は、様々な情報を得ることができます。

String index = deleteResponse.getIndex(); // index String type = deleteResponse.getType(); // type String id = deleteResponse.getId(); // id long version = deleteResponse.getVersion(); .// version 

インデックスAPI

IndexRequest request = new IndexRequest(
    "posts", //Index
    "doc", //Type
    "1"); //Document id
String jsonString = "{" +
    "\"user\":\"kimchy\"," +
    "\"postDate\":\"2013-01-30\"," +
    "\"message\":\"trying out Elasticsearch\"" +
    "}";
request.source(jsonString, XContentType.JSON); /以字符串提供的 Document source

本明細書で使用されるようIndexRequestインデックス要求を行います。インデックス\タイプ\ ID情報を含め、その後、文字列として、ここで使用された文書のインデックスを作成します。
ドキュメントは、キーと値のペアの方法の配列として文字列、マップ、XContentBuilder、Object配列、BytesReference、を含む種々の方法を提供するために用いることができます。

Map<String, Object> jsonMap = new HashMap<>(); jsonMap.put("user", "kimchy"); jsonMap.put("postDate", new Date()); jsonMap.put("message", "trying out Elasticsearch"); IndexRequest indexRequest = new IndexRequest("posts", "doc", "1").source(jsonMap); //Map 作为文档源,它可以自动转换为 JSON 格式。 XContentBuilder builder = XContentFactory.jsonBuilder(); builder.startObject(); { builder.field("user", "kimchy"); builder.field("postDate", new Date()); builder.field("message", "trying out Elasticsearch"); } builder.endObject(); IndexRequest indexRequest = new IndexRequest("posts", "doc", "1").source(builder); //XContentBuilder 对象作为文档源,由 Elasticsearch 内置的帮助器生成 JSON 内容 IndexRequest indexRequest = new IndexRequest("posts", "doc", "1") .source("user", "kimchy", "postDate", new Date(), "message", "trying out Elasticsearch"); //以键值对对象作为文档来源,它自动转换为 JSON 格式 

他のAPI

継続するには。(公式残りクライアントAPIドキュメントのさまざまな件名)

おすすめ

転載: www.cnblogs.com/xiang--liu/p/11613402.html