当前位置:   article > 正文

elasticsearch常用操作_es查看所有索引

es查看所有索引

一、常用操作

(1)索引库操作

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文件夹下

一般创建索引库使用如下配置:

  1. PUT /es_db
  2. {
  3. "settings": {
  4. "index":{
  5. "analysis.analyzer.default.type":"ik_max_word"
  6. }
  7. },
  8. "mappings":{
  9. "properties":{
  10. "id":{"type":"keyword","index":true,"store":true},
  11. "title":{"type":"text","index":true,"store":true},
  12. "content":{"type":"text","index":true,"store":true}
  13. }
  14. }
  15. }

3、查询索引库
GET /es_db

4、删除索引库
DELETE /es_db

(2)文档操作

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

三、DSL高级查询(精髓)

(1)query方式查询

说明:在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": "我爱"
        }
      }
    }
  }
}

(2)filter方式查询

说明:不会计算相关分值,也不会对结果进行排序,效率高。查询的结果可以被缓存。
GET /es_db/_doc/_search
{
  "query":{
     "bool":{
        "filter":{
           "term":{
             "name":"张三"
           }
        }
     }
    }
  }
}

(3)bool查询

GET /es_db/_doc/_search
{
  "query":{
    "bool":{
      "must": [
        {"match": {
           "gender": "男"
        }},
        {"match":{
          "address": "中国"
        }}
      ],
      "must_not": [
        {"match":{
          "age": "18"
        }}
      ],
      "should":[
        {"match":{
          "lastname": "张"
        }}
      ]
    }
  }
}

性别是男,地址是中国,年龄不能是18,最好姓张(不是也没事,影响分值而已)

(4)通配符查询

GET /es_db/_doc/_search
{
  "query": {
      "bool": {
          "must": [
              {"wildcard": {"title": "*网*"}}
          ]
      }
  }
}

四、mapping映射有关

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、简单数据类型:

  • 字符型:text
  • 数字型:long,integer,shrot,byte,double,float
  • 日期类型:date
  • 布尔类型:boolean
  • 二进制:binary

2、复杂数据类型:

  • 数组类型:不需要专门的类型来定义数组
  • 对象数据类型:object,单独的json对象
  • 嵌套数据类型:nested,关于json对象的数组

3、地理数据类型:

  • 地理点数据类型:geo_point,经纬度点
  • 地理形状数据类型:geo_shape,多边形的复杂地理形状

4、专门数据类型:

  • ipv4数据类型:ip协议为ipv4的地址。
  • 完成数据类型:completion,提供自动补全的建议
  • 单词计数数据类型:token_count,统计字符串中单词的数量
  • 不被分词数据类型:keyword

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"}
      }
  }
}

五、整合springboot

(1)添加依赖

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
  4. </dependency>

(2)注入RestHighLevelClient

  1. @Autowired
  2. private RestHighLevelClient restHighLevelClient;

(3)插入数据

  1. //模拟json数据
  2. HashMap<Object, Object> map = new HashMap<>();
  3. map.put("username","sumengnan");
  4. map.put("password","123456");
  5. //创建一个批量写入请求
  6. BulkRequest bulkRequest = new BulkRequest();
  7. //索引库请求
  8. IndexRequest indexRequest = new IndexRequest("user","_doc");
  9. indexRequest.source(JSON.toJSONString(map),XContentType.JSON);
  10. bulkRequest.add(indexRequest);
  11. try {
  12. //bulk是批量写入
  13. //mget是批量读取
  14. BulkResponse bulk = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
  15. System.out.println(bulk.buildFailureMessage());
  16. if (!bulk.hasFailures()) {
  17. System.out.println("ok");
  18. }else{
  19. System.out.println("no ok");
  20. }
  21. } catch (IOException e) {
  22. e.printStackTrace();
  23. }

(4)查询数据

  1. //构建搜索请求
  2. SearchRequest searchRequest = new SearchRequest("user");
  3. //构建搜索源
  4. SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
  5. searchSourceBuilder.from(1);
  6. searchSourceBuilder.size(4);
  7. //设置查询
  8. MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("username", "sumengnan");
  9. searchSourceBuilder.query(matchQueryBuilder);
  10. //设置高亮
  11. HighlightBuilder highlightBuilder = new HighlightBuilder();
  12. highlightBuilder.field("username");
  13. highlightBuilder.preTags("<span style='color:red'>");//设置前缀标签
  14. highlightBuilder.postTags("<span>");//设置后缀标签
  15. searchSourceBuilder.highlighter(highlightBuilder);
  16. searchRequest.source(searchSourceBuilder);//搜索源加入搜索请求
  17. SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
  18. for (SearchHit hit : searchResponse.getHits()) {
  19. Map<String, Object> sourceAsMap = hit.getSourceAsMap();
  20. System.out.println(sourceAsMap);
  21. Map<String, HighlightField> highlightFields = hit.getHighlightFields();
  22. HighlightField username = highlightFields.get("username");
  23. Text[] fragments = username.getFragments();
  24. for (Text fragment : fragments) {
  25. return fragment.string();
  26. }
  27. }
  28. return Collections.emptyMap();

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/499061
推荐阅读
相关标签
  

闽ICP备14008679号