一、全文检索
lucene实现全文检索流程
二、ELK日志协议栈
ELK:是一套完整的解决方案
1)elasticsearch:分布式搜索引擎的框架
2)
三、Elasticsearch介绍
1、介绍
简称ES,es是一个开源的高扩展的分布式全文检索引擎,专注于存储和检索数据,基于java语言编瞎写。
2、特点
1)仅支持json文件格式;
2)Elasticsearch 本身更注重于核心功能,高级功能多有第三方插件提供;
3)Elasticsearch 自身带有分布式协调管理功能;
四、ES的基本概念
Elasticsearch对比传统关系型数据库如下:
Relational DB -> Databases -> Tables -> Rows -> Columns
Elasticsearch -> Indices -> Types -> Documents -> Fields
五、Elasticsearch核心概念
1.索引 index
一个索引就是一个拥有几分相似特征的文档的集合。相当于mysql中的database
2.类型 type
在一个索引中,你可以定义一种或多种类型。相当于mysql中table
3.field
相当于mysql中column。es数据的每一个字段。
4.文档 document
一个文档是一个可被索引的基础信息单元。就是一条数据。相当于mysql中的row
5.映射 mapping
针对每一个field的属性定义。是否存储。是否索引,是否分词。
6.setting
设置一个index库的分片数和副本数
7.集群 cluster
由每一个es节点组成的服务。
8、节点 node
一个es服务器就是一个节点。
9.分片和复制
shard:一个index索引库的分片
replicas:副本
六、使用javaAPI访问集群
1、导入pom
2、创建索引(prepareindex)
2.1创建Client
@Before
public void init() throws UnknownHostException {
Settings settings = Settings.builder().put("cluster.name", "myes").build();
client = new PreBuiltTransportClient(settings);
client.addTransportAddress(new TransportAddress(InetAddress.getByName("hadoop01"),9300))
.addTransportAddress(new TransportAddress(InetAddress.getByName("hadoop02"),9300))
.addTransportAddress(new TransportAddress(InetAddress.getByName("hadoop03"),9300));
}
2.2 第一种创建方式 自己凭借json创建然后保存到索引库下
@Test
public void createIndex1(){
// json 创建
String json = "{" +
""user":"kimchy"," +
""postDate":"2013-01-30"," +
""message":"travelying out Elasticsearch"" +
"}";
// 预插入 prepareIndex
client.prepareIndex("索引名", "类型", "id")
.setSource(json, XContentType.JSON)
.get();
}
2.3 使用map创建索引
@Test
public void index2() throws Exception {
// 定义map
HashMap<String, String> jsonMap = new HashMap<String, String>();
// 添加数据
jsonMap.put("name", "zhangsan");
jsonMap.put("sex", "1");
。。。。。
client.prepareIndex("myindex1", "article", "2")
.setSource(jsonMap)
.get();
client.close();
}
2.3XcontentBuilder实现创建索引
@Test
public void index3() throws IOException {
client.prepareIndex("myindex1", "article", "3")
.setSource(new XContentFactory().jsonBuilder()
.startObject()
.field("name", "lisi")
.field("age", "18")
.field("sex", "0")
.field("address", "bj")
.endObject())
.get();
client.close();
}
2.4 将对象转换为json格式字符串进行创建索引
1、定义一个person对象
2、插入数据
*/
@Test
public void objToIndex(){
Person person = new Person();
person.setAge(18);
person.setId(20);
person.setSex(1);
。。。。。
String json = JSONObject.toJSONString(person);
client.prepareIndex("myindex1","article","32")
.setSource(json,XContentType.JSON)
.get();
client.close();
}
2.5 批量创建索引
@Test
public void index4() throws IOException {
BulkRequestBuilder bulk = client.prepareBulk();
bulk.add(client.prepareIndex("myindex1", "article", "4")
.setSource(new XContentFactory().jsonBuilder()
.startObject()
.field("name", "wangwu")
.field("age", "18")
.field("sex", "0")
.field("address", "bj")
.endObject()));
bulk.add(client.prepareIndex("news", "article", "5")
.setSource(new XContentFactory().jsonBuilder()
.startObject()
.field("name", "zhaoliu")
.field("age", "18")
.field("sex", "0")
a .field("address", "bj")
.endObject()));
BulkResponse bulkResponse = bulk.get();
client.close();
}
3、更新索引(prepareUpdate)
根据系统给数据生成的id来进行更新索引
@Test
public void updateIndex(){
Person guansheng = new Person(修改的数据);
client.prepareUpdate()
.setIndex("索引库名")
.setType("类型")
.setId("id")
.setDoc(JSONObject.toJSONString(guansheng),XContentType.JSON)
.get();
client.close();
}
4、删除索引(prepareDelete)
1、根据id来删除
@Test
public void deleteById(){
client.prepareDelete("索引库名", "类型", "id").get();
client.close();
}
2、删除整个索引库
client.admin()
.indices()
.prepareDelete("索引库名")
.execute()
.actionGet();
client.close();