1 package com.gxy.ESChap01;
2
3 import java.net.InetAddress;
4
5 import org.elasticsearch.action.search.SearchRequestBuilder;
6 import org.elasticsearch.action.search.SearchResponse;
7 import org.elasticsearch.client.transport.TransportClient;
8 import org.elasticsearch.common.settings.Settings;
9 import org.elasticsearch.common.transport.InetSocketTransportAddress;
10 import org.elasticsearch.index.query.QueryBuilder;
11 import org.elasticsearch.index.query.QueryBuilders;
12 import org.elasticsearch.search.SearchHit;
13 import org.elasticsearch.search.SearchHits;
14 import org.elasticsearch.transport.client.PreBuiltTransportClient;
15 import org.junit.After;
16 import org.junit.Before;
17 import org.junit.Test;
18 /**
19 * 使用smartcn分词查询
20 * @author 郭祥跃
21 *
22 */
23 public class ESQuerySmartcn {
24 private static String host="192.168.56.3"; // 服务器地址
25 private static int port=9300; // 端口
26
27 public static final String CLUSTER_NAME = "my-application"; //集群名称
28
29 private TransportClient client=null;
30
31 private static final String ANALYZER="smartcn";
32
33 private static Settings settings= Settings.builder()
34 .put("cluster.name",CLUSTER_NAME)
35 .put("client.transport.sniff", true)
36 .build();
37
38 //获取客户端
39 @SuppressWarnings({ "resource", "unchecked" })
40 @Before
41 public void getClient() throws Exception {
42 try {
43 client = new PreBuiltTransportClient(settings)
44 .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(host),port));
45 } catch (Exception e) {
46 // TODO Auto-generated catch block
47 e.printStackTrace();
48 }
49 }
50
51 //关闭客户端
52 @After
53 public void close() {
54 if(client!=null) {
55 client.close();
56 }
57 }
58 /**
59 * 条件分词查询
60 */
61 @Test
62 public void search() {
63 SearchRequestBuilder srb=client.prepareSearch("book").setTypes("kehuan");
64 SearchResponse sr=srb.setQuery(QueryBuilders.matchQuery("title", "三体").analyzer(ANALYZER))
65 .setFetchSource(new String[] {"title","price"},null)
66 .execute()
67 .actionGet();
68 SearchHits hits=sr.getHits();
69 for(SearchHit hit:hits){
70 System.out.println(hit.getSourceAsString());
71 }
72 }
73 /**
74 * 多字段条件分词查询
75 */
76 @Test
77 public void search2() {
78 SearchRequestBuilder srb=client.prepareSearch("book").setTypes("kehuan");
79 SearchResponse sr=srb.setQuery(QueryBuilders.multiMatchQuery("美国宇宙红岸", "title","content")
80 .analyzer(ANALYZER))
81 .setFetchSource(new String[] {"title","price"},null)
82 .execute()
83 .actionGet();
84 SearchHits hits=sr.getHits();
85 for(SearchHit hit:hits){
86 System.out.println(hit.getSourceAsString());
87 }
88 }
89 }