十三、 ELASTICSEARCH JAVAAPI-查詢操作


TestElasticSearch4J

 
根據關鍵字進行分頁查詢
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
package  com.how2java;
 
import  java.io.IOException;
import  java.util.HashMap;
import  java.util.List;
import  java.util.Map;
 
import  org.apache.http.HttpHost;
import  org.elasticsearch.ElasticsearchStatusException;
import  org.elasticsearch.action.admin.indices.create.CreateIndexRequest;
import  org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import  org.elasticsearch.action.admin.indices.open.OpenIndexRequest;
import  org.elasticsearch.action.bulk.BulkRequest;
import  org.elasticsearch.action.delete.DeleteRequest;
import  org.elasticsearch.action.get.GetRequest;
import  org.elasticsearch.action.get.GetResponse;
import  org.elasticsearch.action.index.IndexRequest;
import  org.elasticsearch.action.search.SearchRequest;
import  org.elasticsearch.action.search.SearchResponse;
import  org.elasticsearch.action.update.UpdateRequest;
import  org.elasticsearch.client.RestClient;
import  org.elasticsearch.client.RestHighLevelClient;
import  org.elasticsearch.common.unit.Fuzziness;
import  org.elasticsearch.index.query.MatchQueryBuilder;
import  org.elasticsearch.search.SearchHit;
import  org.elasticsearch.search.SearchHits;
import  org.elasticsearch.search.builder.SearchSourceBuilder;
import  org.elasticsearch.search.sort.ScoreSortBuilder;
import  org.elasticsearch.search.sort.SortOrder;
 
public  class  TestElasticSearch4J {
     private  static  RestHighLevelClient client =  new  RestHighLevelClient(
             RestClient.builder(
                     new  HttpHost( "localhost" 9200 "http" )
             ));
     private  static  String indexName =  "how2java" ;
     
     public  static  void  main(String[] args)  throws  IOException {
         
         String keyword =  "時尚連衣裙" ;
         int  start =  0 ;
         int  count =  10 ;
         
         SearchHits hits = search(keyword, start, count);
         
         SearchHit[] searchHits = hits.getHits();
         for  (SearchHit hit : searchHits) {
 
             System.out.println(hit.getSourceAsString());
         }
         
         client.close();
 
     }
 
     private  static  SearchHits search(String keyword,  int  start,  int  count)  throws  IOException {
         SearchRequest searchRequest =  new  SearchRequest(indexName);
         
         SearchSourceBuilder sourceBuilder =  new  SearchSourceBuilder();
         //關鍵字匹配
         MatchQueryBuilder matchQueryBuilder =  new  MatchQueryBuilder( "name" ,keyword );
         //模糊匹配
         matchQueryBuilder.fuzziness(Fuzziness.AUTO);
         sourceBuilder.query(matchQueryBuilder);
         //第幾頁
         sourceBuilder.from(start);
         //第幾條
         sourceBuilder.size(count);
 
         searchRequest.source(sourceBuilder);
         //匹配度從高到低
         sourceBuilder.sort( new  ScoreSortBuilder().order(SortOrder.DESC));
         
         SearchResponse searchResponse = client.search(searchRequest);
         
         SearchHits hits = searchResponse.getHits();
         return  hits;
     }
 
     private  static  void  batchInsert(List<Product> products)  throws  IOException {
         // TODO Auto-generated method stub
         BulkRequest request =  new  BulkRequest();
         
         for  (Product product : products) {
             Map<String,Object> m  = product.toMap();
             IndexRequest indexRequest=  new  IndexRequest(indexName,  "product" , String.valueOf(product.getId())).source(m);
             request.add(indexRequest);
         }
         
         client.bulk(request);
         System.out.println( "批量插入完成" );
     }
 
     private  static  void  deleteDocument( int  id)  throws  IOException {
         DeleteRequest  deleteRequest =  new  DeleteRequest (indexName, "product" , String.valueOf(id));
         client.delete(deleteRequest);
         System.out.println( "已經從ElasticSearch服務器上刪除id=" +id+ "的文檔" );
     }
 
     private  static  void  updateDocument(Product product)  throws  IOException {
     
         UpdateRequest  updateRequest =  new  UpdateRequest (indexName,  "product" , String.valueOf(product.getId()))
                 .doc( "name" ,product.getName());
                 
         client.update(updateRequest);
         System.out.println( "已經在ElasticSearch服務器修改產品為:" +product);
         
     }
 
     private  static  void  getDocument( int  id)  throws  IOException {
         // TODO Auto-generated method stub
         GetRequest request =  new  GetRequest(
                 indexName,
                 "product"
                 String.valueOf(id));
         
         GetResponse response = client.get(request);
         
         if (!response.isExists()){
             System.out.println( "檢查到服務器上 " + "id=" +id+  "的文檔不存在" );
         }
         else {
             String source = response.getSourceAsString();
             System.out.print( "獲取到服務器上 " + "id=" +id+  "的文檔內容是:" );
 
             System.out.println(source);
             
         }
         
     }
 
     private  static  void  addDocument(Product product)  throws  IOException {
         Map<String, Object> jsonMap =  new  HashMap<>();
         jsonMap.put( "name" , product.getName());
         IndexRequest indexRequest =  new  IndexRequest(indexName,  "product" , String.valueOf(product.getId()))
                 .source(jsonMap);
         client.index(indexRequest);
         System.out.println( "已經向ElasticSearch服務器增加產品:" +product);
     }
 
     private  static  boolean  checkExistIndex(String indexName)  throws  IOException {
         boolean  result = true ;
         try  {
 
             OpenIndexRequest openIndexRequest =  new  OpenIndexRequest(indexName);
             client.indices().open(openIndexRequest).isAcknowledged();
 
         catch  (ElasticsearchStatusException ex) {
             String m =  "Elasticsearch exception [type=index_not_found_exception, reason=no such index]" ;
             if  (m.equals(ex.getMessage())) {
                 result =  false ;
             }
         }
         if (result)
             System.out.println( "索引:"  +indexName +  " 是存在的" );
         else
             System.out.println( "索引:"  +indexName +  " 不存在" );
         
         return  result;
         
     }
 
     private  static  void  deleteIndex(String indexName)  throws  IOException {
         DeleteIndexRequest request =  new  DeleteIndexRequest(indexName);
         client.indices().delete(request);
         System.out.println( "刪除了索引:" +indexName);
 
     }
 
     private  static  void  createIndex(String indexName)  throws  IOException {
         // TODO Auto-generated method stub
         CreateIndexRequest request =  new  CreateIndexRequest(indexName);
         client.indices().create(request);
         System.out.println( "創建了索引:" +indexName);
     }
      
}

 


先運行,看到效果,再學習

下載地址:http://download.how2j.cn/1704/elasticsearch4j.rar


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM