赞
踩
1、查询es中的所有索引库
GET /_cat/indices?v
2、创建索引库(并指定ik分词器)
PUT /es_db
{
"settings": {
"index":{
"analysis.analyzer.default.type":"ik_max_word"
}
}
}
需下载ik分词器:Releases · medcl/elasticsearch-analysis-ik · GitHub
并解压到plugins/ik文件夹下
一般创建索引库使用如下配置:
- PUT /es_db
- {
- "settings": {
- "index":{
- "analysis.analyzer.default.type":"ik_max_word"
- }
- },
- "mappings":{
- "properties":{
- "id":{"type":"keyword","index":true,"store":true},
- "title":{"type":"text","index":true,"store":true},
- "content":{"type":"text","index":true,"store":true}
- }
- }
- }
3、查询索引库
GET /es_db
4、删除索引库
DELETE /es_db
1、添加或修改文档(根据有无id判断)
PUT /es_db/_doc/1
{
"name":"sumengnan",
"desc":"我爱你中国",
"age":25
}
PUT /es_db/_doc/2
{
"name":"张三",
"desc":"中华人民共和国",
"age":20
}
2、查询文档
GET /es_db/_doc/1
3、删除文档
DELETE /es_db/_doc/1
1、查询当前类型中所有的文档
GET /es_db/_doc/_search
2、条件查询,如查询age等于20的数据
GET /es_db/_doc/_search?q=age:20
3、小于等于条件查询,例如查询年龄小于23岁的
GET /es_db/_doc/_search?q=age:<=23
4、小于大于条件查询,例如查询年龄大于23岁的
GET /es_db/_doc/_search?q=age:>23
5、范围查询,查询age在20到22之间的数据
GET /es_db/_doc/_search?q=age[20 TO 22]
6、批量id查询,例如根据多个id查询数据
GET /es_db/_doc/_mget
{
"ids":[1,2]
}
7、分页查询 from=*&size=*
GET /es_db/_doc/_search?q=age:20&from=0&size=2
8、对结果只输出某些字段
GET /es_db/_doc/_search?_source=name,desc
9、对结果进行排序
GET /es_db/_doc/_search?sort=age:desc
说明:在es中存储的数据都会存在一个_score分值,分值越高越匹配。计算分值复杂需要一定时间
1、term不分词
GET /es_db/_doc/_search
{
"query":{
"term": {
"name":"张三"
}
}
}
}
2、match分词
GET /es_db/_doc/_search
{
"query":{
"match": {
"desc":"中国"
}
}
}
}
#match或分词:
GET /es_db/_search
{
"query":{
"match": {
"desc":{
"query":"人民 中国",
"operator":"or"
}
}
}
}
}
3、multi_match多字段模糊匹配查询
GET /es_db/_doc/_search
{
"query":{
"multi_match":{
"query":"张三",
"fields":["name","desc"]
}
}
}
}
4、query_string未指定字段查询(AND或OR大写)
GET /es_db/_doc/_search
{
"query":{
"query_string":{
"query":"张三 OR 我爱你"
}
}
}
}
5、query_string指定字段查询(AND或OR大写)
GET /es_db/_doc/_search
{
"query":{
"query_string":{
"query":"张三 OR 我爱你",
"fields":["name","desc"]
}
}
}
}
6、range范围查询
说明:gte:大于等于,lte:小于等于,gt:大于,lt:小于,now:当前时间
GET /es_db/_doc/_search
{
"query":{
"range":{
"age":{
"gte":23,
"lte":25
}
}
}
}
}
7、from,size分页、_source输出字段、sort排序等查询
GET /es_db/_doc/_search
{
"from":0,
"size":2,
"_source":["name","desc"],
"sort":{
"age":"desc"
},
"query":{
"match": {
"desc":"中国"
}
}
}
}
8、前缀匹配
GET /es_db/_search
{
"query":{
"prefix": {
"desc.keyword": {
"value": "我爱"
}
}
}
}
}
说明:不会计算相关分值,也不会对结果进行排序,效率高。查询的结果可以被缓存。
GET /es_db/_doc/_search
{
"query":{
"bool":{
"filter":{
"term":{
"name":"张三"
}
}
}
}
}
}
GET /es_db/_doc/_search
{
"query":{
"bool":{
"must": [
{"match": {
"gender": "男"
}},
{"match":{
"address": "中国"
}}
],
"must_not": [
{"match":{
"age": "18"
}}
],
"should":[
{"match":{
"lastname": "张"
}}
]
}
}
}
性别是男,地址是中国,年龄不能是18,最好姓张(不是也没事,影响分值而已)
GET /es_db/_doc/_search
{
"query": {
"bool": {
"must": [
{"wildcard": {"title": "*网*"}}
]
}
}
}
1、获取索引库映射信息
GET /es_db/_mapping
2、创建索引库并指定静态映射
说明:keyword不会分词(能聚合、排序),text会分词(不能聚合、排序),index建立索引,store是否存储(不存储查不到,一般只需搜索而不需展示到页面的才设置false,如地址)
PUT /es_db
{
"mappings":{
"properties":{
"name":{"type":"keyword","index":true,"store":true},
"desc":{"type":"text","index":true,"store":true},
"age":{"type":"integer","index":true,"store":true}
}
}
}
附:映射字段数据类型:
1、简单数据类型:
2、复杂数据类型:
3、地理数据类型:
4、专门数据类型:
3、静态映射同时指定分词器(一般不用这个,指定全局的就好了)
PUT /es_db
{
"mappings":{
"properties":{
"name":{"type":"keyword","index":true,"store":true,"analyzer": "ik_smart","search_analyzer": "ik_max_word"},
"desc":{"type":"text","index":true,"store":true,"analyzer": "ik_smart","search_analyzer": "ik_max_word"},
"age":{"type":"integer","index":true,"store":true,"analyzer": "ik_smart","search_analyzer": "ik_max_word"}
}
}
}
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
- </dependency>
- @Autowired
- private RestHighLevelClient restHighLevelClient;
- //模拟json数据
- HashMap<Object, Object> map = new HashMap<>();
- map.put("username","sumengnan");
- map.put("password","123456");
-
- //创建一个批量写入请求
- BulkRequest bulkRequest = new BulkRequest();
- //索引库请求
- IndexRequest indexRequest = new IndexRequest("user","_doc");
- indexRequest.source(JSON.toJSONString(map),XContentType.JSON);
- bulkRequest.add(indexRequest);
- try {
- //bulk是批量写入
- //mget是批量读取
- BulkResponse bulk = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
- System.out.println(bulk.buildFailureMessage());
- if (!bulk.hasFailures()) {
- System.out.println("ok");
- }else{
- System.out.println("no ok");
- }
- } catch (IOException e) {
- e.printStackTrace();
- }

- //构建搜索请求
- SearchRequest searchRequest = new SearchRequest("user");
-
- //构建搜索源
- SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
- searchSourceBuilder.from(1);
- searchSourceBuilder.size(4);
- //设置查询
- MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("username", "sumengnan");
- searchSourceBuilder.query(matchQueryBuilder);
- //设置高亮
- HighlightBuilder highlightBuilder = new HighlightBuilder();
- highlightBuilder.field("username");
- highlightBuilder.preTags("<span style='color:red'>");//设置前缀标签
- highlightBuilder.postTags("<span>");//设置后缀标签
- searchSourceBuilder.highlighter(highlightBuilder);
-
- searchRequest.source(searchSourceBuilder);//搜索源加入搜索请求
-
- SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
- for (SearchHit hit : searchResponse.getHits()) {
- Map<String, Object> sourceAsMap = hit.getSourceAsMap();
- System.out.println(sourceAsMap);
- Map<String, HighlightField> highlightFields = hit.getHighlightFields();
- HighlightField username = highlightFields.get("username");
- Text[] fragments = username.getFragments();
- for (Text fragment : fragments) {
- return fragment.string();
- }
- }
- return Collections.emptyMap();

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。