ELK技術を学習大きなデータラインを共有するのが良いプログラマ、ビンストレージ elasticSearchは、 コマンドを実行します。
コンフィグ ストアの構成ファイル
libに 保管 elasticSearch 運用依存のjar パッケージ
モジュール 格納さ elasticSearch モジュール
プラグイン ストレージ・プラグイン
1.1 。 ElasticsearchとMySQLのコントラスト
Elasticsearchクラスタが複数のインデックス(指数)を含むことができ、各インデックスは複数のタイプ(タイプ)を含むことができ、それぞれのタイプには、各文書が複数のフィールド(フィールド)を含めることができ、複数のドキュメント(文書)を含めることができます。以下の理解を助けるために、MySQLとElasticsearch項類推図のとおりです。
MySQLデータベースと同じように最初のインデックスを作成する必要がありElasticsearchを使用する、のように指定する必要があります。
client.indices.create({インデックス: 'ブログ'})。
これは、インデックスと呼ばれるブログを作成します。あなたがマッピングを作成するときに代わりに別の作成のタイプは、次のように指定することができます。各フィールドのタイプを定義するために使用されるマッピング・ドキュメント、すなわちアナライザは、インデックスの属性かどうか、使用されている、などが重要です。
索引オブジェクト(BLOB) データを格納するためのテーブル構造 索引オブジェクトに格納され、任意の検索データ、。
マッピング(マッピング):データは、インデックスオブジェクトに保存されている方法は、する必要がありマッピング設定ように単語かどうか、保存された...かどうか、データの種類:を含みます、。
ドキュメント(文書):データレコード、インデックスオブジェクトの存在
文書タイプ(種類):データ・オブジェクトの複数のタイプ、文書タイプによって識別されたデータを格納するための指標
[]フォローアッププログラム:
ステップ1:インデックスオブジェクトを作成します。
ステップ2:マッピングを確立
第三段階:データを保存する[ドキュメント]
ステップ4:文書検索データのタイプを指定し、[ドキュメント]
1.1 。 インデックスを作成します
コマンドのElasticsearch一般的な形式は:REST VERBHOST:9200 /インデックス/ DOC-タイプ - REST VERBが置かれており、GETまたはDELETE。(curlL -X動詞接頭辞を使用すると、明示的にHTTPメソッドを指定します。)
インデックスを作成するには、シェルで次のコマンドを実行することができます。
カール-XPUTは "http:// localhostを:9200 / blog01 /"
ビュー
1.1 。 文書を挿入
/ blog01インデックスに型を作成するには、ドキュメントに挿入することができます。
インデックスに「デッキホールズ」文書を含めるには、次のコマンドを(このチュートリアルでは、コマンドや他のCURLコマンドは1行に入力されている)を実行します。
curl -XPUT "http://localhost:9200/blog01/article/1" -d "{"""id""": """1""", """title""": """Whatiselasticsearch"""}"
前面的命令使用 PUT 动词将一个文档添加到 /article文档类型,并为该文档分配 ID 为1。URL 路径显示为index/doctype/ID(索引/文档类型/ID)。
1.2. 查看文档
要查看该文档,可使用简单的 GET 命令:
curl -XGET "http://localhost:9200/blog01/article/1"
Elasticsearch 使用你之前 PUT 进索引中的 JSON 内容作为响应:
1.3. 更新文档
如果你认识到title字段写错了,并想将它更改为 Whatislucene 怎么办?可运行以下命令来更新文档:
curl -XPUT "http://localhost:9200/blog01/article/1" -d "{"""id""": """1""", """title""": """Whatislucene"""}"
因为此命令使用了相同的唯一 ID为1,所以该文档会被更新。
1.4. 搜索文档
是时候运行一次基本查询了,此查询比你运行来查找 “Get the Halls” 文档的简单 GET 要复杂一些。文档 URL 有一个内置的 _search 端点用于此用途。在标题中找到所有包含单词 lucene 的数据:
curl -XGET "http://localhost:9200/blog01/article/_search?q=title:'Whatislucene'"
参数表示一个查询。
1.5. 检查搜索返回对象
上图中给出了 Elasticsearch 从前面的查询返回的数据。
在结果中,Elasticsearch 提供了多个 JSON 对象。第一个对象包含请求的元数据:看看该请求花了多少毫秒 (took) 和它是否超时 (timed_out)。_shards 字段需要考虑 Elasticsearch 是一个集群化服务的事实。甚至在这个单节点本地部署中,Elasticsearch 也在逻辑上被集群化为分片。在往后看可以观察到 hits 对象包含:
· total 字段,它会告诉你获得了多少个结果
· max_score,用于全文搜索
· 实际结果
实际结果包含 fields 属性,因为你将 fields 参数添加到了查询中。否则,结果中会包含 source,而且包含完整的匹配文档。_index、_type 和 _id 分别表示索引、文档类型、ID;_score 指的是全文搜索命中长度。这 4 个字段始终会在结果中返回。
1.6. 删除文档
暂时不要删除该文档,知道如何删除它就行了:
curl -XDELETE "http://localhost:9200/blog01/article/1"
1.7. 删除索引
暂时不要删除该文档,知道如何删除它就行了:
curl -XDELETE "http://localhost:9200/blog01"
1.要使用 Elasticsearch 首先需要创建 Index:client.indices.create({index : 'blog'});创建了一个名为 blog的 Index
2.Type 不用单独创建,在创建 Mapping 时指定就可以。
3.Mapping 用来定义 Document 中每个字段的类型,即所使用的 analyzer、是否索引等属性,非常关键等
URL 路径显示为index/doctype/ID(索引/文档类型/ID)
创建文档(插入一条数据),自动创建索引和映射
======================================================
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.client.Client;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.junit.Before;
import org.junit.Test;
import java.net.InetAddress;
import java.util.HashMap;
import java.util.Map;
public class ESTest {
//创建连接
private Client client;
/**
* 通过TransportClient获取ES连接
*/
@Before
public void getClient() throws Exception {
//ES服务的JavaAPI的port为9300
//注意:如果请求一个ES集群,可以考虑多添加几个节点,
//为了避免在一个节点出现网络问题导致的请求失败问题,可以自动切换另外一个节点
client = TransportClient.builder().build()
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300));
}
@Test
/**
* 1.使用json来创建文档(插入一条数据),自动创建索引和映射
*/
public void creatDocument() {
//jason格式的数据创建文档(插入一条数据),自动创建索引和映射
String source = "{" +
"\"id\":\"1\"," +
"\"title\":\"woshishui\"," +
"\"content\":\"wozaina\"" +
"}";
//创建文档:定义索引名称,文档类型,主键唯一标识id
//execute().actionGet()==get() 代码马上执行
IndexResponse indexResponse =
client.prepareIndex("blog", "article", "1").setSource(source).get();
//获取响应信息
this.loadResponse(indexResponse);
client.close();
}
public void loadResponse(IndexResponse indexResponse){
System.out.println("索引名称" + indexResponse.getIndex());
System.out.println("文档类型" + indexResponse.getType());
System.out.println("ID" + indexResponse.getId());
System.out.println("版本" + indexResponse.getVersion());
System.out.println("是否创建成功" + indexResponse.isCreated());
}
/**
* 2.使用mao创建文档.自动创建索引和映射
*/
public void creatDocument2(){
//map类型的数据
Map<String,Object> source = new HashMap<String, Object>();
source.put("id","2");
source.put("title","我是谁");
source.put("content","我在哪");
//创建文档
IndexResponse indexResponse =
client.prepareIndex("blog","article","2")
.setSource(source).get();
this.loadResponse(indexResponse);
client.close();
}
/**
* 3.使用ES帮助类(执行类),创建文档
*/
@Test
public void creatDocument3() throws Exception{
XContentBuilder source = XContentFactory.jsonBuilder()
.startObject()
.field("id",3)
.field("title","whoami")
.field("content","whereami")
.endObject();
System.out.println(source.toString());
//创建文档
IndexResponse indexResponse = client.prepareIndex("blog", "article", "3").setSource(source).get();
this.loadResponse(indexResponse);
client.close();
}
}
======================================================================================
搜索文档数据
1.单个索引
2.多个索引
更新数据
方式一:
方式二:
方式三
删除数据
查询
queryStringQuery:
es默认的分词器并没有中文进行分词,需要我们按照一个比默认屌很多的分词器(Ik分词器)
创建映射