ElasticSearch TermQuery查询 API
本案例都采用mysql 和 elasticsearch 做对比来描叙elasticsearch API
package org.ssgroup;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.HashMap;
import java.util.Map;
import org.elasticsearch.action.bulk.BulkRequestBuilder;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
public class TestElasticsearch {
public static String[] CLUSTER_IP = new String[] {"192.168.10.252","192.168.10.254","192.168.10.255"};
public static int CLUSTER_PORT = 9300;
public static String CLUSTER_NAME = "my-application";
@SuppressWarnings({ "resource", "unchecked" })
public static void main(String[] args) throws UnknownHostException {
Settings settings = Settings.builder().put("cluster.name", CLUSTER_NAME).build();
TransportClient client = new PreBuiltTransportClient(settings);
for(String ip : CLUSTER_IP) {
client.addTransportAddress(new TransportAddress(InetAddress.getByName(ip),CLUSTER_PORT));
}
// 1.批量插入一些测试帖子数据
BulkRequestBuilder bulkRequestBuilder = client.prepareBulk();
Map<String,Object> params = new HashMap<String,Object>();
params.put("articleID", "XHDK-A-1293-#fJ3");
params.put("userID", 1);
params.put("hidden", false);
params.put("postDate", "2017-01-01");
bulkRequestBuilder.add(new IndexRequest("forum", "article", "1").source(params));
params.put("articleID", "KDKE-B-9947-#kL5");
params.put("userID", 1);
params.put("hidden", false);
params.put("postDate", "2017-01-02");
bulkRequestBuilder.add(new IndexRequest("forum", "article", "2").source(params));
params.put("articleID", "JODL-X-1937-#pV7");
params.put("userID", 2);
params.put("hidden", false);
params.put("postDate", "2017-01-03");
bulkRequestBuilder.add(new IndexRequest("forum", "article", "3").source(params));
params.put("articleID", "QQPX-R-3956-#aD8");
params.put("userID", 2);
params.put("hidden", false);
params.put("postDate", "2017-01-01");
bulkRequestBuilder.add(new IndexRequest("forum", "article", "4").source(params));
BulkResponse bulkResponse = bulkRequestBuilder.execute().actionGet();
System.out.println(bulkResponse.status());
//termQuery:精确匹配
//2.根据用户ID搜索帖子
//类似mysql:select * from forum.article where userID=1
SearchResponse response = client.prepareSearch("forum").setTypes("article")
.setQuery(QueryBuilders.termQuery("userID", 1))
.get();
for(SearchHit searchHit : response.getHits().getHits()) {
String jsonStr = searchHit.getSourceAsString();
System.out.println(jsonStr);
}
System.out.println("*********************************************");
//3.搜索没有隐藏的帖子
//类似mysql:select * from forum.article where hidden=false
response = client.prepareSearch("forum").setTypes("article")
.setQuery(QueryBuilders.termQuery("hidden", false))
.get();
for(SearchHit searchHit : response.getHits().getHits()) {
String jsonStr = searchHit.getSourceAsString();
System.out.println(jsonStr);
}
System.out.println("*********************************************");
//4.根据发帖日期搜索帖子
//类似mysql:select * from forum.article where postDate='2017-01-01'
response = client.prepareSearch("forum").setTypes("article")
.setQuery(QueryBuilders.termQuery("postDate", "2017-01-01"))
.get();
for(SearchHit searchHit : response.getHits().getHits()) {
String jsonStr = searchHit.getSourceAsString();
System.out.println(jsonStr);
}
System.out.println("*********************************************");
//5.根据articleID搜索帖子
//注意:articleID text类型 elasticsearch 会有两种类型数据,
// 1、elasticsearch会对text进行分词
// 2、elasticsearch会对text添加一个keyword属性,这个是不分词的
//如果我们使用termQuery("articleID", "XHDK-A-1293-#fJ3") 是查询不到这个结果,
//因为:分词结果里面没有等于XHDK-A-1293-#fJ3的值
//所以:需要改成termQuery("articleID.keyword", "XHDK-A-1293-#fJ3")
response = client.prepareSearch("forum").setTypes("article")
.setQuery(QueryBuilders.termQuery("articleID.keyword", "XHDK-A-1293-#fJ3"))
.get();
for(SearchHit searchHit : response.getHits().getHits()) {
String jsonStr = searchHit.getSourceAsString();
System.out.println(jsonStr);
}
}
}