[关闭]
@Great-Chinese 2016-07-26T14:44:48.000000Z 字数 6692 阅读 1389

Elasticsearch 基本安装

Elasticsearch


集群健康值说明:

  1. 红色,代表集群不可用
  2. 黄色,代表集群可用不可复制
  3. 绿色,代表集群正常

1、下载

https://www.elastic.co/downloads/elasticsearch

2、安装

2.1解压 elasticsearch-*.tar.gz 文件

tar -xvf elasticsearch-*.tar.gz

014.png-12.8kB

2.2 安装marvel插件

bin/plugin install license
bin/plugin install marvel-agent

Note
每个版本的安装命令都不同,具体参看最新官网文档,
https://www.elastic.co/downloads/marvel

2.3安装 head

bin/plugin install mobz/elasticsearch-head

3、启动

bin/elasticsearch
bin/elasticsearch -d #后台启动

4、基本配置

冒号后面必需预留一个空格

  1. cluster.name: hks
  2. node.name: hks_data
  3. node.master: true
  4. node.data: true
  5. #分片索引个数
  6. index.number_of_shards : 5
  7. #副本个数
  8. index.number_of_replicas : 1
  9. #索引文件路径,多个用逗号隔开
  10. path.data : /hksdata/java/elasticsearch/data
  11. #临时文件存储
  12. path.work : /hksdata/java/elasticsearch/tmp
  13. #日志文件路径
  14. path.logs : /hksdata/java/elasticsearch/logs
  15. #设置绑定ip,多个ip用逗号隔开,默认为本地
  16. network.host : 10.163.101.230,120.27.43.49
  17. http.port : 9200
  18. transport.tcp.port : 9300
  19. transport.tcp.compress : true
  20. #设置传输最大数据为100M
  21. http.max_content_length : 10mb
  22. # 启用对外http
  23. http.enabled : true
  24. #es集群配置,数据自动复制
  25. discovery.zen.minimum_master_nodes: 2
  26. discovery.zen.ping.timeout: 10s
  27. discovery.zen.ping.multicast.enabled: true
  28. discovery.zen.ping.unicast.hosts: ["10.163.101.230" , "10.45.19.14"]
  29. #配置IK分词器
  30. index.analysis.analyzer.default.type: ik

5、IK分词器

a、下载ik分词器已发布的版本 https://github.com/medcl/elasticsearch-analysis-ik/releases
b、安装maven
c、编译ik分词器
1、解压该zip到一个目录
进入改目录,输入命令

  1. mvn clean install -Dmaven.test.skip=true

编译成功后会在target/releases目录下生成一个zip的文件,将这个文件复制到 es_home/plugins/analysis-ik 目录下(因为网络原因,一次可能编译不成功,可以尝试多次编译)
02.png-23.3kB

6、设置某个字段不分词

  1. curl -XPUT http://10.163.101.230:9200/hksesdata/ -d' { "mappings": { "part":{ "properties": { "relation_code": { "type": "string", "index": "not_analyzed" }, "materialname": { "type": "string" }, "relation_brandid": { "type": "string","index": "not_analyzed" }, "relation_picno": { "type": "string","index": "not_analyzed" }, "relation_postion": { "type": "string","index": "not_analyzed" }, "relation_oecode": { "type": "string","index": "not_analyzed" }, "relation_cartypecode": { "type": "string","index": "not_analyzed" }, "brandcode": { "type": "string", "index": "not_analyzed" }, "originscode": { "type": "string", "index": "not_analyzed" }, "ecpunit": { "type": "string", "index": "not_analyzed" }, "relation_groupid": { "type": "string","index": "not_analyzed" } }

7、maven项目,依赖包

  1. <dependency>
  2. <groupId>org.elasticsearch</groupId>
  3. <artifactId>elasticsearch</artifactId>
  4. <version>2.3.2</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>com.google.guava</groupId>
  8. <artifactId>guava</artifactId>
  9. <version>19.0</version>
  10. </dependency>

8、java查询api

  1. package org.es;
  2. import java.net.InetAddress;
  3. import java.util.Iterator;
  4. import java.util.Map;
  5. import org.elasticsearch.action.search.SearchRequestBuilder;
  6. import org.elasticsearch.action.search.SearchResponse;
  7. import org.elasticsearch.action.search.SearchType;
  8. import org.elasticsearch.client.transport.TransportClient;
  9. import org.elasticsearch.common.settings.Settings;
  10. import org.elasticsearch.common.settings.Settings.Builder;
  11. import org.elasticsearch.common.transport.InetSocketTransportAddress;
  12. import org.elasticsearch.index.query.BoolQueryBuilder;
  13. import org.elasticsearch.index.query.QueryBuilders;
  14. import org.elasticsearch.search.SearchHit;
  15. import org.elasticsearch.search.SearchHits;
  16. import org.elasticsearch.search.aggregations.Aggregation;
  17. import org.elasticsearch.search.aggregations.AggregationBuilders;
  18. import org.elasticsearch.search.aggregations.bucket.terms.StringTerms;
  19. import org.elasticsearch.search.aggregations.bucket.terms.Terms;
  20. import org.elasticsearch.search.aggregations.bucket.terms.Terms.Bucket;
  21. import org.elasticsearch.search.aggregations.bucket.terms.TermsBuilder;
  22. import org.elasticsearch.search.sort.SortBuilders;
  23. public class ElasticSearchUtils {
  24. protected TransportClient client ;
  25. protected String index ;
  26. protected String type ;
  27. protected String idKey ;
  28. /**
  29. * 创建TransportClient
  30. * @param clusterName 集群名称
  31. * @param host 地址
  32. * @param port es端口
  33. * */
  34. TransportClient getTransportClient(String clusterName , String host , Integer port) throws Exception {
  35. Builder builder = Settings.builder().put("cluster.name", clusterName ) ;
  36. TransportClient client = TransportClient
  37. .builder()
  38. .settings(builder)
  39. .build()
  40. .addTransportAddress(
  41. new InetSocketTransportAddress(InetAddress
  42. .getByName( host ), port));
  43. return client ;
  44. }
  45. /**
  46. * 创建TransportClient
  47. * @param clusterName 集群名称
  48. * @param host 地址
  49. * @param port es端口 , 末日�?300
  50. * @param index 索引
  51. * @param type 类型
  52. * @param idKey 主名
  53. * */
  54. public static ElasticSearchUtils getElasticSearch(String clusterName
  55. , String host , Integer port , String index , String type , String idKey){
  56. try {
  57. ElasticSearchUtils search = new ElasticSearchUtils();
  58. search.client = search.getTransportClient(clusterName, host, port) ;
  59. search.idKey = idKey ;
  60. search.index = index ;
  61. search.type = type ;
  62. return search ;
  63. } catch(Exception e ) {
  64. throw new RuntimeException( e.getMessage() , e ) ;
  65. }
  66. }
  67. public static void main(String[] args) {
  68. ElasticSearchUtils searchUtils = ElasticSearchUtils.getElasticSearch("hks"
  69. , "hksdata01", 9300, "hksesdata", "part", "id") ;
  70. /*创建搜索引擎*/
  71. SearchRequestBuilder requestBuilder = searchUtils.client.prepareSearch( searchUtils.index )
  72. .setTypes( searchUtils.type ) .setSearchType(SearchType.DEFAULT
  73. ).setFrom(0)
  74. .setSize( 20 ) ;
  75. /*指定排序字段,可以指定多个*/
  76. requestBuilder.addSort( SortBuilders.fieldSort("p1001_customertype2") );
  77. requestBuilder.addSort( SortBuilders.fieldSort("p1001_customertype2") );
  78. //requestBuilder.setQuery(QueryBuilders.matchPhraseQuery( "keyword" , "FDB" ));
  79. /*使用bool查询*/
  80. BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
  81. /*设置查询*/
  82. requestBuilder.setQuery(
  83. //QueryBuilders.termsQuery("keyword", "FDB" , "鲁达" )
  84. boolQueryBuilder
  85. .must(QueryBuilders.matchQuery("keyword", "奥迪 Q5"))
  86. );
  87. SearchResponse actionGet = requestBuilder.setExplain(true).execute().actionGet();
  88. SearchHits searchHits = actionGet.getHits() ;
  89. SearchHit[] hits = searchHits.getHits();
  90. System.out.println( "totalHits: " + searchHits.getTotalHits() );
  91. for (SearchHit hit : hits) {
  92. Map<String, Object> source = hit.getSource() ;
  93. if(null != source){
  94. System.out.println( source.get("materialcode") + "-->" + source.get("materialname"));
  95. }
  96. }
  97. /*---------------------分组 搜索------------------------*/
  98. SearchRequestBuilder searchRequestBuilder = searchUtils.client.prepareSearch( searchUtils.index )
  99. .setTypes( searchUtils.type ) .setSearchType(SearchType.DEFAULT
  100. ).setFrom(0)
  101. .setSize( 100 ) ;
  102. searchRequestBuilder.setQuery(
  103. //QueryBuilders.termsQuery("keyword", "FDB" , "鲁达" )
  104. boolQueryBuilder
  105. .must(QueryBuilders.matchQuery("keyword", "奥迪"))
  106. );
  107. TermsBuilder partidTermsBuilder = AggregationBuilders.terms("postion").field("relation_postion") ;
  108. partidTermsBuilder.size( 100 );
  109. searchRequestBuilder.addAggregation( partidTermsBuilder );
  110. SearchResponse sr = searchRequestBuilder.execute().actionGet();
  111. Map<String, Aggregation> aggMap = sr.getAggregations().asMap() ;
  112. StringTerms postionTerms = (StringTerms) aggMap.get("postion") ;
  113. Iterator<Terms.Bucket> iterator = postionTerms.getBuckets().iterator();
  114. while(iterator.hasNext()){
  115. Bucket next = iterator.next();
  116. System.out.println( next.getKey() + "--->" + next.getDocCount());
  117. }
  118. }
  119. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注