ElasticSearch-学习笔记04Java客户端操作索引库
Posted 延锋L
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ElasticSearch-学习笔记04Java客户端操作索引库相关的知识,希望对你有一定的参考价值。
目录
01-ES课程介绍
学习目标:
能够使用java客户端完成创建、删除索引的操作
能够使用java客户端完成文档的增删改的操作
能够使用java客户端完成文档的查询操作
能够完成文档的分页操作
能够完成文档的高亮查询操作
能够搭建Spring Data ElasticSearch的环境
能够完成Spring Data ElasticSearch的基本增删改查操作
能够掌握基本条件查询的方法命名规则
管理ES的客户端工具:postman、head插件。
02-使用Java客户端创建索引库
一、使用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();
03-使用Java客户端设置mapping步骤
一、使用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对象
04-使用java客户端设置mapping映射
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();
05-向索引库中添加文档
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();
06-添加文档的第二种方式
一、使用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();
07-索引库查询_根据id查询
一、使用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();
08-索引库查询_根据term查询
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);
09-索引库查询_queryString查询
10-查询分页设置
01、插入数据
@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();
02、设置分页
一、使用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:每页显示的记录数
11-查询结果高亮显示
一、使用Java客户端管理ES
1、创建索引库
2、使用Java客户端设置Mappings
3、添加文档(一行数据)
4、添加文档的第二种方式二、使用ES客户端实现搜索
1、根据id搜索
2、根据Term查询(关键词)
3、QueryString查询方式(带分析的查询)
4、分页的处理
5、查询结果高亮显示
(1)高亮的配置
1)设置高亮显示的字段
2)设置高亮显示的前缀
3)设置高亮显示的后缀
(2)在client对象执行查询之前,设置高亮显示的信息
(3)遍历结果列表时可以从结果中取高亮结果
01、查看高亮结果
给关键词的前后加上html标签作为前后缀。
02、高亮显示代码实现
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——快速生成变量。
以上是关于ElasticSearch-学习笔记04Java客户端操作索引库的主要内容,如果未能解决你的问题,请参考以下文章