ES基礎概念

10051 ワード

1.逆インデックス
逆インデックスは、実際のアプリケーションで属性の値に基づいてレコードを検索する必要があることに由来します.レコードによって属性値が決定されるのではなく、属性値によってレコードの位置が決定されるので、逆インデックスと呼ばれます.
逆インデックスには3つのファイル、インデックス語ファイル、語周波数ファイル、位置ファイルがあります.
2.索引語
インデックス語はインデックスできる正確な語です.
3.テキスト
テキストは一般的な非構造化文字です.
3.分析
解析はテキストをインデックス語に変換するプロセスであり,解析の結果は分詞器に依存する.
4.クラスタ
クラスタは、1つ以上のノードから構成され、外部にサービスを提供し、外部にインデックスと検索機能を提供します.すべてのノードでは、1つのクラスタに一意の名前がデフォルトで「ElasticSearch」に設定されています.この名前は、各ノードがクラスタの一部にすぎないため、ノードが同じクラスタ名に設定されると自動的にクラスタに追加されるため、重要です.複数のクラスタが必要な場合は、各クラスタの名前が重複しないようにします.そうしないと、ノードが誤ったクラスタに追加される可能性があります.
5.ノード
1つのノードは論理的に独立したサービスであり、クラスタの一部であり、データを格納し、クラスタのインデックスと検索機能に参加することができます.クラスタのように、ノードにも一意の名前があり、起動時に割り当てられます.1つのノードに1つのクラスタしか追加できません.
6.ルーティング
ドキュメントを格納すると、ハッシュ値によって選択される単一のプライマリ・スライスに格納されます.
7.スライス
スライスは単一のLuceneインスタンスです.スライスには主スライスと副スライスがあります.
8.索引
インデックスは、同じ構造を持つドキュメントの集合です.データベースに相当するDatebase
9.タイプ
インデックスでは、1つ以上のタイプを定義できます.タイプはインデックスの論理パーティションです.データベース内のテーブルに相当します.
10.ドキュメント
ドキュメントは、データベース内のテーブルの行に相当するElasticsearchに格納されているJSON文字列です.
11.マッピング
リレーショナル・データベースのテーブル構造をマッピングします.各インデックスにはマッピングがあります.
12.フィールド
ESデータストレージの最小単位であるリレーショナル・データベースの列.
13.プライマリ・キーID
IDは接続されていない一意のIDであり、ライブラリにIDが指定されていない場合、システムは自動的にIDを生成します.
14.Restリクエストヘッダ
Httpデータ処理
post   create
get     read
put     update
delete delete
15.文書の添削
put/post/get/delete http://ip:ポート/インデックス名/タイプ/プライマリ・キー
パラメータ
16.文書の添削
package com.czy.demo;

import org.elasticsearch.action.ActionListener;
import org.elasticsearch.action.bulk.BulkRequestBuilder;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.bulk.byscroll.BulkByScrollResponse;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.get.MultiGetItemResponse;
import org.elasticsearch.action.get.MultiGetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.reindex.DeleteByQueryAction;
import org.elasticsearch.rest.RestStatus;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Date;

import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;

/**
 *        
 * Created by chenzhiyuan on 2017/8/29.
 */
public class OperationIndexDemo {
    private TransportClient client;

    @Before
    public void before() throws UnknownHostException {
        Settings settings = Settings.builder()
                .put("cluster.name", "elasticsearch")
                .put("client.transport.sniff", true)
                .build();
        client = new PreBuiltTransportClient(settings)
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));
    }

    /**
     *                   
     *          JSON      
     * 1.    
     * 2.    
     * 3.  JACKSON   
     * 4.  Elasticsearch   ,    
     *     response           :
     * //     
     * String _index = response.getIndex();
     * //     
     * String _type = response.getType();
     * //   id
     * String _id = response.getId();
     * //   (if it's the first time you index this document, you will get: 1)
     * long _version = response.getVersion();
     * //      is true if the document is a new one, false if it has been updated
     * boolean created = response.isCreated();
     */
    @Test
    public void createIndex() throws IOException {
        IndexResponse response = client.prepareIndex("twitter", "tweet", "1")
                .setSource(jsonBuilder()
                        .startObject()
                        .field("user", "kimchy")
                        .field("postDate", new Date())
                        .field("message", "trying out Elasticsearch")
                        .endObject()
                )
                .get();
        //    response           :
        //     
        String _index = response.getIndex();
        //     
        String _type = response.getType();
        //   id
        String _id = response.getId();
        //   (if it's the first time you index this document, you will get: 1)
        long _version = response.getVersion();
        // status has stored current instance statement.
        RestStatus status = response.status();
        System.out.println("index:" + _index + " type:" + _type + " id:" + _id + " version:" + _version);
        System.out.println("status:" + status);

    }

    @Test
    public  void getIndex() throws  Exception{
        GetResponse response = client.prepareGet("twitter","tweet","1")
                .setOperationThreaded(false)
                .get();
        System.out.println(response.getSource());
    }

    @Test
    public void deleteIndex() throws  Exception{
        DeleteResponse response = client.prepareDelete("twitter","tweet","1")
                .get();
        System.out.println(response.getResult());
    }

    @Test
    public  void updateIndex() throws  Exception{
        //             
        UpdateRequest updateRequest = new UpdateRequest();
        updateRequest.index("twitter");
        updateRequest.type("tweet");
        updateRequest.id("1");
        updateRequest.doc(jsonBuilder().startObject().field("user","cxy").endObject());
        UpdateResponse response = client.update(updateRequest).get();
        System.out.println(response.getResult());
    }

    @Test
    public  void upsertIndex() throws  Exception{
        IndexRequest indexRequest = new IndexRequest("twitter","tweet","2")
                .source(jsonBuilder().startObject()
                .field("user", "cxy")
                .field("postDate", new Date())
                .field("message", "trying")
                .endObject());
        UpdateRequest updateRequest = new UpdateRequest("twitter","tweet","2")
                .doc(jsonBuilder().startObject()
                .field("user","cxy")
                .endObject())
                .upsert(indexRequest);
       UpdateResponse response= client.update(updateRequest).get();
        System.out.println(response.getResult());
    }

    @Test
    public  void multiGetIndex() throws Exception{
        MultiGetResponse multiGetItemResponses = client.prepareMultiGet()
                .add("twitter","tweet","1")
                .add("twitter","tweet","2","3")
                .add("another","type","foo")
                .get();
        for (MultiGetItemResponse itemResponse :multiGetItemResponses){
            GetResponse response = itemResponse.getResponse();
            if(response!=null &&response.isExists()){
                System.out.println(response.getSourceAsString());
            }
        }
    }

    @Test
    public void deleteByQuery() throws  Exception{
        BulkByScrollResponse response = DeleteByQueryAction.INSTANCE.newRequestBuilder(client)
                .filter(QueryBuilders.matchQuery("user","czy"))
                .source("twitter")
                .get();
        long deleteNumber = response.getDeleted();
        System.out.println(deleteNumber);
    }

    @Test
    public void deleteByQueryAsynchronously() throws  Exception{
        DeleteByQueryAction.INSTANCE.newRequestBuilder(client)
                .filter(QueryBuilders.matchQuery("user","cxy"))
                .source("twitter")
                .execute(new ActionListener() {
                    @Override
                    public void onResponse(BulkByScrollResponse bulkByScrollResponse) {
                        System.out.println(bulkByScrollResponse.getDeleted());
                    }

                    @Override
                    public void onFailure(Exception e) {
                        System.out.println(e.getMessage());
                    }
                });
    }

    @Test
    public  void bulkIndex() throws Exception{
        BulkRequestBuilder bulkRequest = client.prepareBulk();
        bulkRequest.add(client.prepareIndex("twitter","tweet","4")
                        .setSource(jsonBuilder().startObject()
                        .field("user","czy")
                        .field("postDate",new Date())
                        .field("message","happy ending")
                        .endObject()
                        )
        );
        bulkRequest.add(client.prepareIndex("twitter","tweet","4")
                .setSource(jsonBuilder().startObject()
                        .field("user","cxy")
                        .field("postDate",new Date())
                        .field("message","happy ending")
                        .endObject()
                )
        );
        BulkResponse bulkResponse= bulkRequest.get();
        System.out.println(bulkResponse.getTook());
        if (bulkResponse.hasFailures()) {
            System.out.println(bulkResponse.getTook());
        }
    }
}