安装es
安装elasticsearch-head-master
启动es 里 bin
cmd进入elasticsearch-head-master
npm install -g grunt -cli
grunt server
http://localhost:9100
跨域:
D:\sturj\elasticsearch-5.6.8\config
修改:elasticsearch.yml
http.cors.enabled: true
http.cors.allow-origin: “*”
访问:http://localhost:9100
新建索引:
1索引-》新建索引
2可以使用postman http://127.0.0.1:9200/blog 创建索引
增删改查省略
ik:
把ik放到D:\sturj\elasticsearch-5.6.8\plugins目录
测试:http://127.0.0.1:9200/_analyze?analyzer=ik_smart&pretty=true&text=我爱吃菠萝
es集群config配置
#配置跨域请求 * 所有域名可以访问
http.cors.enabled: true
http.cors.allow-origin: “*”
#集群的名称
cluster.name: my-es
#节点名称,其余两个节点分别为node-02 和node-03
node.name: node-01
#指定该节点是否有资格被选举成为master节点,默认是true,es是默认集群中的第一台机器为master,如果这台机挂了就会重新选举master
node.master: true
#允许该节点存储数据(默认开启)
node.data: true
#索引数据的存储路径
path.data: /home/elasticsearch/data/node1
#日志文件的存储路径
path.logs: /home/elasticsearch/log/node1
#设置为true来锁住内存。因为内存交换到磁盘对服务器性能来说是致命的,当jvm开始swapping时es的效率会降低,所以要保证它不swap
bootstrap.memory_lock: true
network.host: 127.0.0.1
http.port: 9201
transport.tcp.port: 9301
discovery.zen.ping.unicast.hosts: [“127.0.0.1:9301”,“127.0.0.1:9302”,“127.0.0.1:9303”]
discovery.zen.minimum_master_nodes: 2
idea:
创建项目->pom->yml
创建类 es:
//创建索引库
@Test
public void createIndex() throws Exception{
//创建一个Setting对象,相当于一个配置信息,主要配置集群名称"elasticsearch"是配置里的名
Settings setting = Settings.builder()
.put("cluster.name","elasticsearch").build();
//创建客户端对象
TransportClient client = new PreBuiltTransportClient(setting);
//9301是我定义的节点名称,为保证高可用,创建3个
client.addTransportAddresses(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9301));
client.addTransportAddresses(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9302));
client.addTransportAddresses(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9303));
//创建索引库
client.admin().indices().prepareCreate("index_hello").
//执行操作
get();
client.close();
}
@Test
public void setMappings() throws Exception{
Settings setting = Settings.builder()
.put("cluster.name","elasticsearch").build();
TransportClient client = new PreBuiltTransportClient(setting)
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9301))
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9302))
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9303));
//创建一个mappring
XContentBuilder xContentBuilder = XContentFactory.jsonBuilder()
//相当于左大括号
.startObject()
.startObject("article")
.startObject("propertioes")
.startObject("id")
.field("type","long")
.field("store","true")
.endObject()
.startObject("title")
.field("type","text")
.field("store","true")
.field("anayzer","ik_smart")
.endObject()
.startObject("content")
.field("type","text")
.field("store","true")
.field("anayzer","ik_smart")
.endObject()
.endObject()
.endObject()
.endObject();
//使用客户端将mapping信息设置到索引库中
client.admin().indices()
//设置要做映射的索引
.preparePutMapping("index_hello")
//设置要做映射的type
.setType("article")
//mapprong信息可以是xContentBuilder,也可以是json
.setSource(xContentBuilder)
.get();
client.close();
}
@Test
public void testAddDucument() throws Exception{
//创建client
XContentBuilder xContentBuilder = XContentFactory.jsonBuilder()
.startObject()
.field("id",1)
.field("title","文档标题")
.field("content","文档内容")
.endObject();
//文档对象添加到数据库
Settings setting = Settings.builder()
.put("cluster.name","elasticsearch").build();
TransportClient client = new PreBuiltTransportClient(setting);
client.prepareIndex()
.setIndex("index_hello")
.setType("article")
.setId("1")
.setSource(xContentBuilder)
.get();
client.close();
}
@Test
//创建一个pojo类
//使用工具类把pojo转换成json字符串
//把文档写入索引库
public void testAddDucumeng2()throws Exception{
//创建一个Article对象
Article article = new Article();
//设置对象属性
article.setId(1);
article.setTitle("标题");
article.setContent("内容的呀");
//把article对象转换成json格式的字符串
ObjectMapper objectMapper =new ObjectMapper();
String json = objectMapper.writeValueAsString(article);
//使用client把文档写入索引库
//关闭client
client.prepareIndex("index_hello","article","3")
.setSource(json, XContentType.JSON)
.get();
client.close();
}
二,使用es客户端实现搜索
1,根据id搜索
2,根据term查询(关键词)
3,QueryString查询方式(待分析的查询)
查询步骤
1,创建一个client
2, id/term/创建一个查询对象,QueryBuliders工具类来创建QueryBuliders对象
3,使用client执行查询
4,得到拆线呢结果。
5,取查询结果的总记录
6,取查询结果列表
7,关闭client
@Test
//创建一个pojo类
//使用工具类把pojo转换成json字符串
//把文档写入索引库
public void testAddDucumeng2()throws Exception{
//创建一个Article对象
Article article = new Article();
//设置对象属性
article.setId(1);
article.setTitle("标题呀");
article.setContent("内容的呀");
//把article对象转换成json格式的字符串
ObjectMapper objectMapper =new ObjectMapper();
String json = objectMapper.writeValueAsString(article);
//使用client把文档写入索引库
//关闭client
client.prepareIndex("index_hello","article","3")
.setSource(json, XContentType.JSON)
.get();
client.close();
}
private void search(QueryBuilder queryBuilder) throws Exception{
//执行查询
SearchResponse searchResponse = client.prepareSearch("index_hello")
.setTypes("article")
.setQuery(queryBuilder)
.get();
//取查询结果
SearchHits searchHits = searchResponse.getHits();
//取查询结果的总记录数
System.out.println("查询结果总记录数"+searchHits.getTotalHits());
//查询结果列表
Iterator<SearchHit> iterator = searchHits.iterator();
while(iterator.hasNext()){
SearchHit searchHit = iterator.next();
System.out.println(searchHit.getSourceAsString());
//取文档属性
System.out.println("文档属性------");
Map<String,Object> document = searchHit.getSource();
System.out.println(document.get("id"));
System.out.println(document.get("title"));
System.out.println(document.get("content"));
}
//关闭client
client.close();
}
@Test
public void testSearchByid() throws Exception {
//创建client
//创建一个查询对象
QueryBuilder queryBuilder = QueryBuilders.idsQuery().addIds("1", "1");
search(queryBuilder);
}
@Test
public void testQueryByTerm() throws Exception{
//name,要搜索的字段
//value要搜素的关键词
QueryBuilder queryBuilder = QueryBuilders.termQuery("title","标题");
search(queryBuilder);
}
@Test
public void testQueryStringQuery() throws Exception{
//name,要搜索的字段
//value要搜素的关键词
QueryBuilder queryBuilder = QueryBuilders.queryStringQuery("内容");
search(queryBuilder);
}
分页:
1在queryBulider对象中执行查询之前,设置分页信息
2然后执行查询
SearchResponse searchResponse = client.prepareSearch(“articleindex”)
.setTypes(“article”)
.setQuery(queryBuilder)
//设置分页信息
.setFrom(0)
.setSize(5)
分页需要设置两个值,From,Size
From:起始的行号,从0开始
size:每页显示的记录数
private void search(QueryBuilder queryBuilder) throws Exception{
//执行查询
Settings setting = Settings.builder()
.put(“cluster.name”,“elasticsearch”).build();
//创建客户端对象
TransportClient client = new PreBuiltTransportClient(setting)
.addTransportAddresses(new InetSocketTransportAddress(InetAddress.getByName(“127.0.0.1”),9300));
SearchResponse searchResponse = client.prepareSearch(“articleindex”)
.setTypes(“article”)
.setQuery(queryBuilder)
//设置分页信息
.setFrom(0)
.setSize(5)
.get();
//取查询结果
SearchHits searchHits = searchResponse.getHits();
//取查询结果的总记录数
System.out.println(“查询结果总记录数”+searchHits.getTotalHits());
//查询结果列表
Iterator iterator = searchHits.iterator();
while(iterator.hasNext()){
SearchHit searchHit = iterator.next();
System.out.println(searchHit.getSourceAsString());
//取文档属性
System.out.println(“文档属性------”);
Map<String,Object> document = searchHit.getSource();
System.out.println(document.get(“id”));
System.out.println(document.get(“title”));
System.out.println(document.get(“content”));
}
//关闭client
client.close();
}
@Test
public void testAddDucumeng3()throws Exception {
for (int i = 0; i < 10; i++) {
//创建一个Article对象
Article article = new Article();
//设置对象属性
article.setId(i);
article.setTitle("哈哈哈哈哈有有有由于啾啾久反反复复烦烦烦"+i);
article.setContent("酷酷酷酷酷酷顶顶顶顶顶顶顶呃呃呃呃嗷嗷嗷啊"+i);
//把article对象转换成json格式的字符串
ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(article);
//使用client把文档写入索引库
//关闭client
Settings setting = Settings.builder()
.put("cluster.name", "elasticsearch").build();
//创建客户端对象
TransportClient client = new PreBuiltTransportClient(setting)
.addTransportAddresses(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));
client.prepareIndex("articleindex", "article", i+"")
.setSource(json, XContentType.JSON)
.get();
client.close();
}
}
@Test
public void testQueryStringQuery() throws Exception{
//name,要搜索的字段
//value要搜素的关键词
QueryBuilder queryBuilder = QueryBuilders.queryStringQuery("烦烦烦")
.defaultField("title");
search(queryBuilder);
}
5.查询结果高亮显示
一 ,高亮的配置
1,设置高亮显示的字段
2,设置高亮显示的前缀
3,设置高亮显示的后缀
二,在client对象执行查询之前,设置高亮显示信息
三,循环遍历列表时可以结果中取高亮显示结果
public void search(QueryBuilder queryBuilder,String highlightField) throws Exception{
HighlightBuilder highlightBuilder = new HighlightBuilder();
//高亮显示的字段
highlightBuilder.field(highlightField);
highlightBuilder.preTags("");
highlightBuilder.postTags("");
//执行查询
Settings setting = Settings.builder()
.put(“cluster.name”,“elasticsearch”).build();
//创建客户端对象
TransportClient client = new PreBuiltTransportClient(setting)
.addTransportAddresses(new InetSocketTransportAddress(InetAddress.getByName(“127.0.0.1”),9300));
SearchResponse searchResponse = client.prepareSearch(“articleindex”)
.setTypes(“article”)
.setQuery(queryBuilder)
//设置分页信息
.setFrom(0)
.setSize(5)
.highlighter(highlightBuilder)
.get();
//取查询结果
SearchHits searchHits = searchResponse.getHits();
//取查询结果的总记录数
System.out.println(“查询结果总记录数”+searchHits.getTotalHits());
//查询结果列表
Iterator iterator = searchHits.iterator();
while(iterator.hasNext()){
SearchHit searchHit = iterator.next();
System.out.println(searchHit.getSourceAsString());
//取文档属性
System.out.println(“文档属性------”);
Map<String,Object> document = searchHit.getSource();
System.out.println(document.get(“id”));
System.out.println(document.get(“title”));
System.out.println(document.get(“content”));
System.out.println("*************");
//高亮结果
Map<String, HighlightField> highlightFields = searchHit.getHighlightFields();
System.out.println(highlightFields);
HighlightField field = highlightFields.get(highlightField);
Text[] fragments = field.getFragments();
if(fragments!=null){
String title = fragments[0].toString();
System.out.println(title);
}
}
//关闭client
client.close();
}