赞
踩
目录
学习目标:
能够使用java客户端完成创建、删除索引的操作
能够使用java客户端完成文档的增删改的操作
能够使用java客户端完成文档的查询操作
能够完成文档的分页操作
能够完成文档的高亮查询操作
能够搭建Spring Data ElasticSearch的环境
能够完成Spring Data ElasticSearch的基本增删改查操作
能够掌握基本条件查询的方法命名规则
管理ES的客户端工具:postman、head插件。
一、使用Java客户端管理ES
1、创建索引库
步骤:
1)创建一个Java工程
2)添加jar包,添加maven的坐标
3)编写测试方法实现创建索引库
1、创建一个Settings对象,相当于是一个配置信息,主要用于配置集群的名称。
2、创建一个客户端Client对象
3、使用client对象创建一个索引库
4、关闭client对象
9201、9202、9203:对外提供http服务的端口号;
9301、9302、9303:tcp形式连接ES服务器(InetSocketTransportAddress方法)。
- package com.itheima.es;
-
- import org.elasticsearch.client.transport.TransportClient;
- import org.elasticsearch.common.settings.Settings;
- import org.elasticsearch.common.transport.InetSocketTransportAddress;
- import org.elasticsearch.transport.client.PreBuiltTransportClient;
- import org.junit.Test;
-
- import java.net.InetAddress;
-
- public class ElasticSearchClientTest {
- @Test
- public void createIndex() throws Exception {
- //1、创建一个Settings对象,相当于是一个配置信息,主要配置集群的名称。
- Settings settings = Settings.builder().put("cluster.name", "my-elasticsearch").build();
- //2、创建一个客户端Client对象
- TransportClient client = new PreBuiltTransportClient(settings);
- //向client中添加三个ip地址的端口号,防止一个服务器不好使然后出现bug
- client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9301));
- client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9302));
- client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9303));
- //3、使用client对象创建一个索引库
- client.admin().indices().prepareCreate("index_hello").get();//.get()执行操作//index_hello索引名称
- //4、关闭client对象
- client.close();
- }
- }
一、使用Java客户端管理ES
1、创建索引库
步骤:
1)创建一个Java工程
2)添加jar包,添加maven的坐标
3)编写测试方法实现创建索引库
1、创建一个Settings对象,相当于是一个配置信息,主要配置集群的名称。
2、创建一个客户端Client对象
3、使用client对象创建一个索引库
4、关闭client对象
2、使用Java客户端设置Mappings
步骤:
1)创建一个Settings对象
2)创建一个Client对象
3)创建一个mapping信息,应该是一个json数据,可以是字符串,也可以是XContextBuilder对象
4)使用client向es服务器发送mapping信息
5)关闭client对象
- package com.itheima.es;
-
- import org.elasticsearch.client.transport.TransportClient;
- import org.elasticsearch.common.settings.Settings;
- import org.elasticsearch.common.transport.InetSocketTransportAddress;
- import org.elasticsearch.common.xcontent.XContentBuilder;
- import org.elasticsearch.common.xcontent.XContentFactory;
- import org.elasticsearch.transport.client.PreBuiltTransportClient;
- import org.junit.Test;
-
- import java.net.InetAddress;
-
- public class ElasticSearchClientTest {
- @Test
- public void createIndex() throws Exception {
- //1、创建一个Settings对象,相当于是一个配置信息,主要配置集群的名称。
- Settings settings = Settings.builder().put("cluster.name", "my-elasticsearch").build();
- //2、创建一个客户端Client对象
- TransportClient client = new PreBuiltTransportClient(settings);
- //向client中添加三个ip地址的端口号,防止一个服务器不好使然后出现bug
- client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9301));
- client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9302));
- client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9303));
- //3、使用client对象创建一个索引库
- client.admin().indices().prepareCreate("index_hello").get();//index_hello索引名称、get()执行操作
- //4、关闭client对象
- client.close();
- }
-
- @Test
- public void setMappings() throws Exception {
- //1、创建一个Settings对象
- Settings settings = Settings.builder().put("cluster.name", "my-elasticsearch").build();
- //2、创建一个Client对象,创建一个TransportClient对象
- TransportClient client = new PreBuiltTransportClient(settings)
- .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));
-
- //3、创建一个mapping信息,应该是一个json数据,可以是字符串,也可以是XContextBuilder对象
- /*
- {
- "article": {type名称,表名:文章
- "properties": {
- "id": {//字段
- "type": "long",
- "store": true
- // "index": "not_analyzed"
- },
- "title": {
- "type": "text",
- "store": true,
- "index": true,
- "analyzer": "ik_smart"//ik_max_word、standard
- },
- "content": {
- "type": "text",
- "store": true,
- "index": true,//analyzed
- "analyzer": "ik_smart"//ik_max_word、standard
- }
- }
- }
- }
- */
- XContentBuilder builder = XContentFactory.jsonBuilder()
- .startObject()
- .startObject("article")//type名称
- .startObject("properties")
- .startObject("id")
- .field("type", "long")
- .field("store", true)
- .endObject()
- .startObject("title")
- .field("type", "text")
- .field("store", true)
- .field("analyzer", "ik_smart")
- .endObject()
- .startObject("content")
- .field("type", "text")
- .field("store", true)
- .field("analyzer", "ik_smart")
- .endObject()
- .endObject()
- .endObject()
- .endObject();
- //4、使用client向es服务器发送mapping信息,使用client把mapping信息设置到索引库中
- client.admin().indices()
- .preparePutMapping("index_hello")//设置要做映射的索引,设置索引库名称
- .setType("article")//设置要做映射的type,设置type名称
- .setSource(builder)//mapping信息,可以是XContentBuilder对象也可以是json格式的字符串
- .get();
- //5、关闭client对象,关闭链接
- client.close();
- }
- }
es集群可以包含多个索引(indices)(数据库),每一个索引可以包含多个类型(types)(表),每一个类型包含多个文档(documents)(行),然后每个文档(数据)包含多个字段(Fields)(列)。
一、使用Java客户端管理ES
1、创建索引库
步骤:
1)创建一个Java工程
2)添加jar包,添加maven的坐标
3)编写测试方法实现创建索引库
1、创建一个Settings对象,相当于是一个配置信息,主要用于配置集群的名称。
2、创建一个客户端Client对象
3、使用client对象创建一个索引库
4、关闭client对象
2、使用Java客户端设置Mappings
步骤:
1)创建一个Settings对象
2)创建一个Client对象
3)创建一个mapping信息,应该是一个json数据,可以是字符串,也可以是XContextBuilder对象
4)使用client向es服务器发送mapping信息
5)关闭client对象
3、添加文档(一行数据)
步骤:
1)创建一个Settings对象
2)创建一个Client对象
3)创建一个文档对象,创建一个json格式的字符串或者使用XContentBuilder
4)使用Client对象吧文档添加到索引库中
5)关闭client
每一步都要创建一个client对象,所以将client单独提取出来。
- package com.itheima.es;
-
- import org.elasticsearch.client.transport.TransportClient;
- import org.elasticsearch.common.settings.Settings;
- import org.elasticsearch.common.transport.InetSocketTransportAddress;
- import org.elasticsearch.common.xcontent.XContentBuilder;
- import org.elasticsearch.common.xcontent.XContentFactory;
- import org.elasticsearch.transport.client.PreBuiltTransportClient;
- import org.junit.Before;
- import org.junit.Test;
-
- import java.net.InetAddress;
-
- public class ElasticSearchClientTest {
- private TransportClient client;
-
- @Before
- public void init() throws Exception {
- //1、创建一个Settings对象
- Settings settings = Settings.builder().put("cluster.name", "my-elasticsearch").build();
- //2、创建一个Client对象,创建一个TransportClient对象
- client = new PreBuiltTransportClient(settings)
- .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));
- }
-
- @Test
- public void createIndex() throws Exception {
- //1、创建一个Settings对象,相当于是一个配置信息,主要配置集群的名称。
- Settings settings = Settings.builder().put("cluster.name", "my-elasticsearch").build();
- //2、创建一个客户端Client对象
- TransportClient client = new PreBuiltTransportClient(settings);
- //向client中添加三个ip地址的端口号,防止一个服务器不好使然后出现bug
- client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9301));
- client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9302));
- client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9303));
- //3、使用client对象创建一个索引库
- client.admin().indices().prepareCreate("index_hello").get();//index_hello索引名称、get()执行操作
- //4、关闭client对象
- client.close();
- }
-
- @Test
- public void setMappings() throws Exception {
- //3、创建一个mapping信息,应该是一个json数据,可以是字符串,也可以是XContextBuilder对象
- /*
- {
- "article": {type名称,表名:文章
- "properties": {
- "id": {//字段
- "type": "long",
- "store": true
- // "index": "not_analyzed"
- },
- "title": {
- "type": "text",
- "store": true,
- "index": true,
- "analyzer": "ik_smart"//ik_max_word、standard
- },
- "content": {
- "type": "text",
- "store": true,
- "index": true,//analyzed
- "analyzer": "ik_smart"//ik_max_word、standard
- }
- }
- }
- }
- */
- XContentBuilder builder = XContentFactory.jsonBuilder()
- .startObject()
- .startObject("article")//type名称
- .startObject("properties")
- .startObject("id")
- .field("type", "long")
- .field("store", true)
- .endObject()
- .startObject("title")
- .field("type", "text")
- .field("store", true)
- .field("analyzer", "ik_smart")
- .endObject()
- .startObject("content")
- .field("type", "text")
- .field("store", true)
- .field("analyzer", "ik_smart")
- .endObject()
- .endObject()
- .endObject()
- .endObject();
- //4、使用client向es服务器发送mapping信息,使用client把mapping信息设置到索引库中
- client.admin().indices()
- .preparePutMapping("index_hello")//设置要做映射的索引,设置索引库名称
- .setType("article")//设置要做映射的type,设置type名称
- .setSource(builder)//mapping信息,可以是XContentBuilder对象也可以是json格式的字符串
- .get();
- //5、关闭client对象,关闭链接
- client.close();
- }
-
- @Test
- public void testAddDocument() throws Exception {
- //1)创建一个Settings对象
- //2)创建一个Client对象
- //public void init() throws Exception {...}
- //3)创建一个文档对象,创建一个json格式的字符串或者使用XContentBuilder
- XContentBuilder builder = XContentFactory.jsonBuilder()
- .startObject()
- .field("id", 2l)//long型数据 2l
- .field("title", "Cause I got a crush on you who you~")
- .field("content", "你是我的我是你的谁~")
- .endObject();
- //4)使用Client对象把文档对象添加到索引库中
- client.prepareIndex()
- .setIndex("index_hello")//设置索引名称
- .setType("article")//设置typr
- .setId("2")//设置文档的id,如果不设置id的话es会自动生成一个id
- .setSource(builder)//设置文档信息,builder对象或json串
- .get();//执行操作
- //5)关闭client客户端
- client.close();
- }
- }
一、使用Java客户端管理ES
1、创建索引库
2、使用Java客户端设置Mappings
3、添加文档(一行数据)4、添加文档第二种方式
创建一个pojo类
使用工具类把pojo转换成json字符串
把文档写入索引库
- @Test
- public void testAddDocument2() throws Exception {
- //创建一个Article对象
- Article article = new Article();
- //设置对象的属性
- article.setId(3l);
- article.setTitle("再多一眼看一眼就会爆炸~");
- article.setContent("再近一点靠近点快被融化~");
- //把article对象转换成json格式的字符串
- ObjectMapper objectMapper = new ObjectMapper();
- String jsonDocument = objectMapper.writeValueAsString(article);
- System.out.println(jsonDocument);
- //使用client对象把文档写入索引库
- client.prepareIndex("index_hello", "article", "3")
- .setSource(jsonDocument, XContentType.JSON)
- .get();
- //关闭客户端
- client.close();
- }
一、使用Java客户端管理ES
1、创建索引库
2、使用Java客户端设置Mappings
3、添加文档(一行数据)
4、添加文档的第二种方式二、使用ES客户端实现搜索
1、根据id搜索
QueryBuilder queryBuilder = QueryBuilders.idsQuery().addIds("1", "2");
2、根据Term查询(关键词)
QueryBuilder queryBuilder = QueryBuilders.termQuery("title", "北方");
3、QueryString查询方式(带分析的查询)
QueryBuilder queryBuilder = QueryBuilders.queryStringQuery("速度与激情").defaultField("title");
查询步骤:
1)创建一个Client对象
2)创建一个查询对象,可以使用QueryBuilders工具类创建QueryBuilder对象
3)使用client执行查询
4)得到查询的结果
5)取查询结果的总记录数
6)取查询结果列表
7)关闭client
- package com.itheima.es;
-
- import org.elasticsearch.action.search.SearchResponse;
- import org.elasticsearch.client.transport.TransportClient;
- import org.elasticsearch.common.settings.Settings;
- import org.elasticsearch.common.transport.InetSocketTransportAddress;
- import org.elasticsearch.index.query.QueryBuilder;
- import org.elasticsearch.index.query.QueryBuilders;
- import org.elasticsearch.search.SearchHit;
- import org.elasticsearch.search.SearchHits;
- import org.elasticsearch.transport.client.PreBuiltTransportClient;
- import org.junit.Before;
- import org.junit.Test;
-
- import java.net.InetAddress;
- import java.util.Iterator;
- import java.util.Map;
-
- public class SearchIndex {
- private TransportClient client;
-
- @Before
- public void init() throws Exception {
- //1、创建一个Settings对象
- Settings settings = Settings.builder().put("cluster.name", "my-elasticsearch").build();
- //2、创建一个Client对象,创建一个TransportClient对象
- client = new PreBuiltTransportClient(settings)
- .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));
- }
-
- @Test
- public void testSearchById() throws Exception {
- //1)创建一个client对象
- //public void init() throws Exception {}
- //2)创建一个查询对象,可以使用QueryBuilders工具类创建QueryBuilder对象
- QueryBuilder queryBuilder = QueryBuilders.idsQuery().addIds("1", "2");
- //3)使用client执行查询
- SearchResponse searchResponse = client.prepareSearch("index_hello")
- .setTypes("article")
- .setQuery(queryBuilder)
- .get();
- //4)得到查询的结果
- SearchHits searchHits = searchResponse.getHits();
- //5)取查询结果的总记录数
- System.out.println("查询结果总记录数:" + searchHits.getTotalHits());
- //6)取查询结果列表
- Iterator<SearchHit> iterator = searchHits.iterator();
- while (iterator.hasNext()) {
- SearchHit searchHit = iterator.next();
- //打印文档对象,以json格式输出
- 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"));
- }
- //7)关闭client
- client.close();
- }
- }
- package com.itheima.es;
-
- import org.elasticsearch.action.search.SearchResponse;
- import org.elasticsearch.client.transport.TransportClient;
- import org.elasticsearch.common.settings.Settings;
- import org.elasticsearch.common.transport.InetSocketTransportAddress;
- import org.elasticsearch.index.query.QueryBuilder;
- import org.elasticsearch.index.query.QueryBuilders;
- import org.elasticsearch.index.query.TermQueryBuilder;
- import org.elasticsearch.search.SearchHit;
- import org.elasticsearch.search.SearchHits;
- import org.elasticsearch.transport.client.PreBuiltTransportClient;
- import org.junit.Before;
- import org.junit.Test;
-
- import java.net.InetAddress;
- import java.util.Iterator;
- import java.util.Map;
-
- public class SearchIndex {
- private TransportClient client;
-
- @Before
- public void init() throws Exception {
- //1、创建一个Settings对象
- Settings settings = Settings.builder().put("cluster.name", "my-elasticsearch").build();
- //2、创建一个Client对象,创建一个TransportClient对象
- client = new PreBuiltTransportClient(settings)
- .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));
- }
-
- private void search(QueryBuilder queryBuilder) throws Exception {
- //3)使用client执行查询
- SearchResponse searchResponse = client.prepareSearch("index_hello")
- .setTypes("article")
- .setQuery(queryBuilder)
- .get();
- //4)得到查询的结果
- SearchHits searchHits = searchResponse.getHits();
- //5)取查询结果的总记录数
- System.out.println("查询结果总记录数:" + searchHits.getTotalHits());
- //6)取查询结果列表
- Iterator<SearchHit> iterator = searchHits.iterator();
- while (iterator.hasNext()) {
- SearchHit searchHit = iterator.next();
- //打印文档对象,以json格式输出
- 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"));
- }
- //7)关闭client
- client.close();
- }
-
- @Test
- public void testSearchById() throws Exception {
- //1)创建一个client对象
- //public void init() throws Exception {}
- //2)创建一个查询对象,可以使用QueryBuilders工具类创建QueryBuilder对象
- QueryBuilder queryBuilder = QueryBuilders.idsQuery().addIds("1", "2");
- search(queryBuilder);
- }
-
- @Test
- public void testQueryByTerm() throws Exception {
- //创建一个QueryBuilder对象
- //参数1:要搜索的字段
- //参数2:要搜索的关键词
- TermQueryBuilder queryBuilder = QueryBuilders.termQuery("title", "爆炸");
- //执行查询
- search(queryBuilder);
- }
- }
- @Test
- public void testAddDocument3() throws Exception {//批量添加数据
- for (int i = 4; i < 100; i++) {
- //创建一个Article对象
- Article article = new Article();
- //设置对象的属性
- article.setId(i);
- article.setTitle("再多一眼看一眼就会爆炸~" + i);
- article.setContent("再近一点靠近点快被融化~" + i);
- //把article对象转换成json格式的字符串
- ObjectMapper objectMapper = new ObjectMapper();
- String jsonDocument = objectMapper.writeValueAsString(article);
- System.out.println(jsonDocument);
- //使用client对象把文档写入索引库
- client.prepareIndex("index_hello", "article", i + "")
- .setSource(jsonDocument, XContentType.JSON)
- .get();
- }
- //关闭客户端
- client.close();
- }
一、使用Java客户端管理ES
1、创建索引库
2、使用Java客户端设置Mappings
3、添加文档(一行数据)
4、添加文档的第二种方式二、使用ES客户端实现搜索
1、根据id搜索
2、根据Term查询(关键词)
3、QueryString查询方式(带分析的查询)
4、分页的处理
在client对象执行查询之前,设置分页信息。
然后再执行查询
//执行查询
SearchResponse searchResponse = client.prepareSearch("index_hello")
.setTypes("article")
.setQuery(queryBuilder)
//设置分页信息
.setFrom(0)
//每页显示的行数
.setSize(5)
.get();
分页需要设置两个值,一个from、size
from:起始的行号,从0开始。
size:每页显示的记录数
一、使用Java客户端管理ES
1、创建索引库
2、使用Java客户端设置Mappings
3、添加文档(一行数据)
4、添加文档的第二种方式二、使用ES客户端实现搜索
1、根据id搜索
2、根据Term查询(关键词)
3、QueryString查询方式(带分析的查询)
4、分页的处理
5、查询结果高亮显示
(1)高亮的配置
1)设置高亮显示的字段
2)设置高亮显示的前缀
3)设置高亮显示的后缀
(2)在client对象执行查询之前,设置高亮显示的信息
(3)遍历结果列表时可以从结果中取高亮结果
给关键词的前后加上HTML标签作为前后缀。
- package com.itheima.es;
-
- import org.elasticsearch.action.search.SearchResponse;
- import org.elasticsearch.client.transport.TransportClient;
- import org.elasticsearch.common.settings.Settings;
- import org.elasticsearch.common.text.Text;
- import org.elasticsearch.common.transport.InetSocketTransportAddress;
- import org.elasticsearch.index.query.QueryBuilder;
- import org.elasticsearch.index.query.QueryBuilders;
- import org.elasticsearch.index.query.TermQueryBuilder;
- import org.elasticsearch.search.SearchHit;
- import org.elasticsearch.search.SearchHits;
- import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
- import org.elasticsearch.search.fetch.subphase.highlight.HighlightField;
- import org.elasticsearch.transport.client.PreBuiltTransportClient;
- import org.junit.Before;
- import org.junit.Test;
-
- import java.net.InetAddress;
- import java.util.Iterator;
- import java.util.Map;
-
- public class SearchIndex {
- private TransportClient client;
-
- @Before
- public void init() throws Exception {
- //1、创建一个Settings对象
- Settings settings = Settings.builder().put("cluster.name", "my-elasticsearch").build();
- //2、创建一个Client对象,创建一个TransportClient对象
- client = new PreBuiltTransportClient(settings)
- .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));
- }
-
- private void search(QueryBuilder queryBuilder) throws Exception {
- //3)使用client执行查询
- SearchResponse searchResponse = client.prepareSearch("index_hello")
- .setTypes("article")
- .setQuery(queryBuilder)
- .get();
- //4)得到查询的结果
- SearchHits searchHits = searchResponse.getHits();
- //5)取查询结果的总记录数
- System.out.println("查询结果总记录数:" + searchHits.getTotalHits());
- //6)取查询结果列表
- Iterator<SearchHit> iterator = searchHits.iterator();
- while (iterator.hasNext()) {
- SearchHit searchHit = iterator.next();
- //打印文档对象,以json格式输出
- 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"));
- }
- //7)关闭client
- client.close();
- }
-
- @Test
- public void testSearchById() throws Exception {
- //1)创建一个client对象
- //public void init() throws Exception {}
- //2)创建一个查询对象,可以使用QueryBuilders工具类创建QueryBuilder对象
- QueryBuilder queryBuilder = QueryBuilders.idsQuery().addIds("1", "2");
- search(queryBuilder);
- /*
- //3)使用client执行查询
- SearchResponse searchResponse = client.prepareSearch("index_hello")
- .setTypes("article")
- .setQuery(queryBuilder)
- .get();
- //4)得到查询的结果
- SearchHits searchHits = searchResponse.getHits();
- //5)取查询结果的总记录数
- System.out.println("查询结果总记录数:" + searchHits.getTotalHits());
- //6)取查询结果列表
- Iterator<SearchHit> iterator = searchHits.iterator();
- while (iterator.hasNext()) {
- SearchHit searchHit = iterator.next();
- //打印文档对象,以json格式输出
- 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"));
- }
- //7)关闭client
- client.close();*/
- }
-
- @Test
- public void testQueryByTerm() throws Exception {
- //创建一个QueryBuilder对象
- //参数1:要搜索的字段
- //参数2:要搜索的关键词
- TermQueryBuilder queryBuilder = QueryBuilders.termQuery("title", "爆炸");
- //执行查询
- search(queryBuilder);
- }
-
- @Test
- public void testQueryStringQuery() throws Exception {
- //创建一个QueryBuilder对象
- QueryBuilder queryBuilder = QueryBuilders.queryStringQuery("爆炸").defaultField("title");
- //执行查询
- search(queryBuilder, "title");
- }
-
- private void search(QueryBuilder queryBuilder, String highLightField) throws Exception {
- HighlightBuilder highlightBuilder = new HighlightBuilder();
- highlightBuilder.field(highLightField);//高亮显示的字段
- highlightBuilder.preTags("<em>");//前缀
- highlightBuilder.postTags("</em>");//后缀
- //3)使用client执行查询
- SearchResponse searchResponse = client.prepareSearch("index_hello")
- .setTypes("article")
- .setQuery(queryBuilder)
- //设置分页信息
- .setFrom(0)//起始行号从0开始
- .setSize(5)//每一页显示的行数
- //设置高亮信息
- .highlighter(highlightBuilder)
- .get();
- //4)得到查询的结果
- SearchHits searchHits = searchResponse.getHits();
- //5)取查询结果的总记录数
- System.out.println("查询结果总记录数:" + searchHits.getTotalHits());
- //6)取查询结果列表
- Iterator<SearchHit> iterator = searchHits.iterator();
- while (iterator.hasNext()) {
- SearchHit searchHit = iterator.next();
- //打印文档对象,以json格式输出
- 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);
- //取title高亮显示的结果
- HighlightField field = highlightFields.get(highLightField);//取key
- Text[] fragments = field.getFragments();
- if (fragments != null) {
- String title = fragments[0].toString();
- System.out.println(title);
- }
- }
- //7)关闭client
- client.close();
- }
- }
高亮显示:
xxx.xxx.var——快速生成变量。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。