1、客户端的使用
1.1、DSL查询和过滤
#查询关键字为vivo,国家为cn的,价格范围6000到8000 #价格降序,并且取前面2条:
GET shop/goods/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"name": "vivo"
}
}
],
"filter": [{
"term": {
"local": "cn"
}
},{
"range":{
"salary":{
"gte":5000,
"lte":8000
}
}
}]
}
},
"size": 2,
"from": 0,
"sort": [{"salary":"desc"}]
}
1.2、普通使用
# 删除所有
DELETE _all
# 查询所有
GET _search
#查询单个 _source:只查询自己的
GET empl/user/1/_source
# 添加 向empl这个数据库中文档id是1的user表里添加数据
PUT empl/user/3
{
"id":2,
"name":"zs",
"age":18
}
# 修改 只修改局部_update
POST empl/user/1/_update
{
"doc": {
"name":"ls"
}
}
# 删除
DELETE itsource/blog/AWtLdXGebyrzXGUwUnDH
#-----------------------
# 批量操作
POST _bulk
{ "delete": { "_index": "itsource", "_type": "employee", "_id": "123" }}
{ "create": { "_index": "itsource", "_type": "blog", "_id": "123" }}
{ "title": "我发布的博客" }
{ "index": { "_index": "itsource", "_type": "blog" }}
{ "title": "我的第二博客" }
# 1.批量获取 _mget
GET itsource/_mget
{
"docs":[
{
"_index":"itsource",
"_type":"blog",
"_id":123
},{
"_index": "itsource",
"_type": "blog",
"_id": "AWtLdW9bbyrzXGUwUnDG",
"_source":["title"]
}
]
}
# 2.批量获取
GET itsource/blog/_mget
{
"ids":["123","AWtLdW9bbyrzXGUwUnDG"]
}
# 分页
GET _search?size=5&from=0
# 字符串搜索
GET itsource/blog/_search?q=_id:123
#DSL模式查询
GET empl/user/_search
{
"query": {
"match": {
"name": "ls"
}
}
}
# DSL 查询公司员工年龄为19的,并按照加入年龄降序排列,最终返回只返回名字、年龄
GET empl/user/_search
{
"query": {
"match": {
"age": "19"
}
},
"size": 10,
"from": 0,
"_source": ["name","age"],
"sort":[{"age":"desc"}]
}
GET _search
DELETE _all
#dsl过滤
POST shop/goods/6
{
"id":6,
"name":"vivo",
"salary":7000,
"local":"cn"
}
POST shop/goods/5
{
"id":5,
"name":"huawel",
"salary":15000,
"local":"cn"
}
#分词器
POST _analyze
{
"analyzer":"ik_smart",
"text":"中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首"
}
#查看数据的映射
GET _mapping
PUT shop
#设置mapping
POST shop/goods/_mapping
{
"goods":{
"properties":{
"id":{"type":"long"},
"name":{
"type":"text",
"analyzer": "ik_smart",
"search_analyzer": "ik_smart"
},
"local":{
"type":"text"
},
"salary":{"type":"double"}
}
}
}
#创建名为global_template的模板
PUT _template/global_template
{
"template":"*",
"settings":{"number_of_shards":1},
"mappings":{
"_default_":{
"_all":{
"enabled":false
},
"dynamic_templates":[
{
"string_as_text":{
"match_mapping_type":"string",
"match":"*_text",
"mapping":{
"type":"text",
"analyzer":"ik_max_word",
"search_analyzer":"ik_max_word",
"fields":{
"raw":{
"type":"keyword",
"ignore_above":256
}
}
}
}
},
{
"string_as_keyword":{
"match_mapping_type":"string",
"mapping":{
"type":"keyword"
}
}
}
]
}
}
}
PUT wps/employee/1
{
"id":1,
"username_text":"小三",
"name":"唐三"
}
# 查看映射
GET wps/employee/_mapping
2、java里使用
import org.elasticsearch.action.bulk.BulkItemResponse;
import org.elasticsearch.action.bulk.BulkRequestBuilder;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.delete.DeleteRequestBuilder;
import org.elasticsearch.action.get.GetRequestBuilder;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.update.UpdateRequestBuilder;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.sort.SortOrder;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.junit.Test;
import java.net.InetAddress;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
public class ESTest {
//普通的查询
@Test
public void testEsGet() throws Exception{
//获取到es的客户端对象
TransportClient transportClient = new PreBuiltTransportClient(Settings.EMPTY).
addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300));
//获取到要进行查询的那条数据
GetRequestBuilder getRequestBuilder = transportClient.prepareGet("wps","employee","1");
//获取到查询的结果
GetResponse getFields = getRequestBuilder.get();
//获取到自己的真实数据
System.out.println(getFields.getSource());
transportClient.close();
}
//删除
@Test
public void testEsDelete() throws Exception{
//获取到客户端
TransportClient transportClient = new PreBuiltTransportClient(Settings.EMPTY).
addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300));
//删除
DeleteRequestBuilder deleteRequestBuilder = transportClient.prepareDelete("wps", "employee", "1");
//获取到删除的真实数据
System.out.println(deleteRequestBuilder.get());
transportClient.close();
}
//添加
@Test
public void testEsPost() throws Exception{
//获取到客户端
TransportClient transportClient = getTransportClient();
//创建索引
IndexRequestBuilder indexRequestBuilder = transportClient.prepareIndex("empl", "user", "1");
//设置类容
Map<String, Object> map = new HashMap<>();
map.put("id",1 );
map.put("name","zs" );
map.put("age", 18);
//添加内容
indexRequestBuilder.setSource(map);
//获取到自己添加的类容结果
System.out.println(indexRequestBuilder.get());
transportClient.close();
}
//修改
@Test
public void testEsUpdate() throws Exception{
TransportClient transportClient = getTransportClient();
//需要修改的数据
UpdateRequestBuilder updateRequestBuilder = transportClient.prepareUpdate("empl", "user", "1");
Map<String,Object> map = new HashMap<>();
map.put("id",2 );
map.put("name","ww" );
map.put("age", 17);
updateRequestBuilder.setDoc(map);
//打印修改的信息
System.out.println(updateRequestBuilder.get());
transportClient.close();
}
//批量添加
@Test
public void testEsBatchSave() throws Exception{
TransportClient transportClient = getTransportClient();
//批量请求的对象
BulkRequestBuilder bulkRequestBuilder = transportClient.prepareBulk();
for (int i = 0;i<10;i++){
Map<String,Object> map = new HashMap<>();
map.put("id",i+1 );
map.put("name", "小"+i);
map.put("des","渡劫飞升" );
//索引
IndexRequestBuilder indexRequestBuilder = transportClient.prepareIndex("dept", "user",Integer.valueOf(i+1).toString());
//添加数据
indexRequestBuilder.setSource(map);
//保存
bulkRequestBuilder.add(indexRequestBuilder);
}
//获取到批量添加的结果
BulkResponse bulkItemResponses = bulkRequestBuilder.get();
//迭代出结果
Iterator<BulkItemResponse> iterator = bulkItemResponses.iterator();
//是否有下一个
while (iterator.hasNext()){
//如果有就打印出来
BulkItemResponse next = iterator.next();
System.out.println(next.getResponse());
}
transportClient.close();
}
//搜索
@Test
public void testEsQuery() throws Exception{
//客户端
TransportClient transportClient = getTransportClient();
//获取组合查询构造器
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
//查询
List<QueryBuilder> musts = boolQueryBuilder.must();
musts.add(QueryBuilders.termQuery("des","渡劫飞升" ));
//过滤
List<QueryBuilder> filter = boolQueryBuilder.filter();
filter.add(QueryBuilders.rangeQuery("id").gte(1).lt(10));
//设置分页 排序
SearchResponse searchResponse = transportClient.prepareSearch("dept")
.setQuery(boolQueryBuilder)
.setFrom(0)
.setSize(10)
.addSort("id", SortOrder.DESC)
.get();
//总条数
long totalHits = searchResponse.getHits().getTotalHits();
System.out.println(totalHits);
// 循环数据结构
SearchHit[] hits = searchResponse.getHits().getHits();
for(SearchHit hit : hits){
System.out.println(hit.getSource());
}
transportClient.close();
}
//抽取es的客户端
private TransportClient getTransportClient() throws Exception {
//主机
TransportAddress transportAddress = new InetSocketTransportAddress(InetAddress.getByName("localhost"),9300);
//获取到客户端对象
return new PreBuiltTransportClient(Settings.EMPTY).addTransportAddress(transportAddress);
}
}