资讯专栏INFORMATION COLUMN

elasticsearch 使用说明

Shonim / 1327人阅读

摘要:使用说明简介是一个高可用开源全文检索和分析组件。提供存储服务,搜索服务,大数据准实时分析等。一般用于提供一些提供复杂搜索的应用。为什么选用是一个准实时的搜索工具,在一般情况下延时少于一秒。

elasticsearch 使用说明.md 简介

ElasticSearch 是一个高可用开源全文检索和分析组件。提供存储服务,搜索服务,大数据准实时分析等。一般用于提供一些提供复杂搜索的应用。

WHY(为什么选用)

ElasticSearch 是一个准实时的搜索工具,在一般情况下延时少于一秒。

支持物理上的水平扩展,并拥有一套分布式协调的管理功能

操作比较简单

restful 风格的API

Elasticsearch的使用场景深入详解

REQUIREMENT (需求)

一些复杂数据的查询导出,使用传统的数据库(关系型数据库)查询以及配合java集合操作,很难解决的问题或者效率并不怎么好的问题,可以考虑使用

weakness(缺点)

维护工作量大

HOWTO (如何去做) 安装 & 启动

下载地址

解压后进入到bin目录下,eg:

运行(binelasticsearch.bat)eg:

访问:http://127.0.0.1:9200/可以看到 eg:

</>复制代码

  1. {
  2. "name": "bJs1ahK",
  3. "cluster_name": "elasticsearch",
  4. "cluster_uuid": "w0fjGOMARzuxt5K5bia07g",
  5. "version": {
  6. "number": "5.6.3",
  7. "build_hash": "1a2f265",
  8. "build_date": "2017-10-06T20:33:39.012Z",
  9. "build_snapshot": false,
  10. "lucene_version": "6.6.1"
  11. },
  12. "tagline": "You Know, for Search"
  13. }

配置参考

程序中使用

API使用文档

创建client

</>复制代码

  1. public class ElasticSearchClient {
  2. private volatile static TransportClient client;
  3. private ElasticSearchClient (){}
  4. public static TransportClient getInstanceClient() {
  5. if (client == null) {
  6. synchronized (TransportClient.class) {
  7. if (client == null) {
  8. /**
  9. * 1. client.transport.ignore_cluster_name 时候校验服务名字 true 校验 false 不校验
  10. * 2. client.transport.ping_timeout 链接联通时间 Defaults 5s
  11. * 3. client.transport.nodes_sampler_interval 节点调用时间 Defaults 5s
  12. */
  13. Settings settings = Settings.builder()
  14. .put("cluster.name", "elasticsearch").build();
  15. try {
  16. client = new PreBuiltTransportClient(settings)
  17. .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9200));
  18. } catch (UnknownHostException e) {
  19. e.printStackTrace();
  20. }
  21. }
  22. }
  23. }
  24. return client;
  25. }
  26. }

创建字段映射

</>复制代码

  1. public class ElasticsearchIndex {
  2. public String jsonIndex() {
  3. String json = "{" +
  4. ""userId":"1001"," +
  5. ""userName":"test"," +
  6. ""userSex":true" +
  7. ""userAge":"28"" +
  8. "}";
  9. return json;
  10. }
  11. public Map mapIndex() {
  12. Map json = new HashMap();
  13. json.put("userId", "1001");
  14. json.put("userName", "test");
  15. json.put("userSex", true);
  16. json.put("userAge", "28");
  17. return json;
  18. }
  19. public byte[] objIndex() {
  20. ObjectMapper mapper = new ObjectMapper(); // create once, reuse
  21. User user = new User();
  22. user.setUserId("1001");
  23. user.setUserName("test");
  24. user.setUserAge(28);
  25. user.setUserSex(true);
  26. byte[] json = new byte[0];
  27. try {
  28. json = mapper.writeValueAsBytes(user);
  29. } catch (JsonProcessingException e) {
  30. e.printStackTrace();
  31. }
  32. return json;
  33. }
  34. public String buildIndex() {
  35. XContentBuilder builder = null;
  36. try {
  37. builder = jsonBuilder()
  38. .startObject()
  39. .field("userId", "1001")
  40. .field("userName", "test")
  41. .field("userSex", true)
  42. .field("userAge", 28)
  43. .endObject();
  44. } catch (IOException e) {
  45. e.printStackTrace();
  46. }
  47. try {
  48. return builder.string();
  49. } catch (IOException e) {
  50. e.printStackTrace();
  51. }
  52. return null;
  53. }
  54. }

操作测试

新增

</>复制代码

  1. public void signInsert() {
  2. TransportClient client = ElasticSearchClient.getInstanceClient();
  3. for(int i=0;i<100;i++) {
  4. IndexResponse response = client.prepareIndex("users", "user", ("" + i))
  5. .setSource(ElasticsearchIndex.buildIndex()).get();
  6. System.out.println(response.getIndex());
  7. }
  8. }

* 修改

</>复制代码

  1. public void signUpdate() {
  2. TransportClient client = ElasticSearchClient.getInstanceClient();
  3. UpdateRequest updateRequest = null;
  4. try {
  5. updateRequest = new UpdateRequest("users", "user", "2")
  6. .doc(jsonBuilder()
  7. .startObject()
  8. .field("userName", "male")
  9. .endObject());
  10. } catch (IOException e) {
  11. e.printStackTrace();
  12. }
  13. try {
  14. UpdateResponse response = client.update(updateRequest).get();
  15. System.out.println(response.getIndex());
  16. } catch (InterruptedException e) {
  17. e.printStackTrace();
  18. } catch (ExecutionException e) {
  19. e.printStackTrace();
  20. }
  21. }

根据ID删除

</>复制代码

  1. public void signDel(){
  2. TransportClient client = ElasticSearchClient.getInstanceClient();
  3. DeleteResponse response = client.prepareDelete("users", "user", "3").get();
  4. System.out.println(response.getIndex());
  5. }

根据查询条件删除

</>复制代码

  1. public void searchDel(){
  2. TransportClient client = ElasticSearchClient.getInstanceClient();
  3. BulkByScrollResponse response =
  4. DeleteByQueryAction.INSTANCE.newRequestBuilder(client)
  5. .filter(QueryBuilders.matchQuery("userName", "male"))
  6. .source("users")
  7. .get();
  8. long deleted = response.getDeleted();
  9. System.out.println(deleted);
  10. }

查询单条

</>复制代码

  1. public void get(){
  2. TransportClient client = ElasticSearchClient.getInstanceClient();
  3. GetResponse response = client.prepareGet("users", "user", "1").get();
  4. if(response.isExists()){
  5. System.out.println(response.getSourceAsString());
  6. }
  7. System.out.println(response.getIndex());
  8. }

批量查询

查询说明

</>复制代码

  1. public void search(){
  2. TransportClient client = ElasticSearchClient.getInstanceClient();
  3. /**
  4. * index 可以多个
  5. * type 可以多个
  6. */
  7. SearchResponse response = client.prepareSearch("users")
  8. .setTypes("user")
  9. .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
  10. .setQuery(QueryBuilders.termQuery("userName", "test")) // Query
  11. .setPostFilter(QueryBuilders.rangeQuery("userAge").from(12).to(30)) // Filter
  12. .setFrom(0).setSize(20).setExplain(true)
  13. .get();
  14. System.out.println(response.getHits().getHits().length);
  15. System.out.println(response.getHits().getAt(0).getSourceAsString());
  16. }
参考博客

elasticsearch 配置说明

elasticsearch 索引说明

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/67892.html

相关文章

发表评论

0条评论

最新活动
阅读需要支付1元查看
<