ElasticSearch TermQuery和bulk API

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);
		}
	}

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值