ES19-Java API全文搜索

1.查询全部

	/**
	 * 分页查询索引中数据
	 * 
	 * @param indexName
	 * @param size
	 * @param form
	 * @return
	 */
	public static List<Telegraph> matchAllQuery(String indexName, int size, int from) {
		QueryBuilder query = QueryBuilders.matchAllQuery();
		SearchResponse response = getClient().prepareSearch(indexName).setQuery(query).setFrom(from).setSize(size)
				.get();

		SearchHits htis = response.getHits();
		List<Telegraph> ts = new ArrayList<Telegraph>();
		Telegraph t;
		for (SearchHit searchHit : htis) {
			System.out.println(searchHit.getSourceAsString());
			t = new Telegraph();
			t.setTitle((String) searchHit.getSourceAsMap().get("title"));
			t.setContent((String) searchHit.getSourceAsMap().get("content"));
			t.setAuthor((String) searchHit.getSourceAsMap().get("author"));
			t.setPubdate((String) searchHit.getSourceAsMap().get("pubdate"));
			ts.add(t);
		}

		return ts;
	}

测试分页查询

	public static void main(String[] args) {
		List<Telegraph> list = matchAllQuery("telegraph", 5, 0);
		for (Telegraph telegraph : list) {
			System.out.println("title:"+telegraph.getTitle()+",content:"+telegraph.getContent()+",author:"+telegraph.getAuthor());
		}
	}

2.全文搜索

执行全文查询的标准查询:”title“字段中包含”董事“的文档

	/**
	 * 根据查询条件查询
	 */
	public static void matchQuery() {

		QueryBuilder query = QueryBuilders.matchQuery("title", "董事");
		SearchResponse response = getClient().prepareSearch("telegraph").setQuery(query).setSize(5).get();

		SearchHits searchHits = response.getHits();

		for (SearchHit searchHit : searchHits) {
			System.out.println(searchHit.getSourceAsString());
		}

	}

测试

public static void main(String[] args) {
		matchQuery();
	}

执行结果:

{"title":"周五召开董事会会议 审议及批准更新后的一季报","content":"以审议及批准更新后的2018年第一季度报告","author":"中兴通讯","pubdate":"2018-07-17T12:33:11"}
{
  "title":"董事长、3名公司高管和2名中层人员被公安机关依法审查",
  "content":"财联社7月24日讯,长生生物公告称,董事长及部分高管无法正常履职,长春市长春新区公安分局对长春长生生产冻干人用狂犬病疫苗涉嫌违法犯罪案件立案调查,将主要涉案人员公司董事长、3名公司高管和2名中层人员带至公安机关依法审查",
  "author":"长生生物"  
}

同时满足”董事“、”高管“条件

	/**
	 * 根据查询条件查询
	 */
	public static void matchQuery() {

		QueryBuilder query = QueryBuilders.matchQuery("title", "董事高管").operator(Operator.AND);
		SearchResponse response = getClient().prepareSearch("telegraph").setQuery(query).setSize(5).get();

		SearchHits searchHits = response.getHits();

		for (SearchHit searchHit : searchHits) {
			System.out.println(searchHit.getSourceAsString());
		}

	}

执行结果:

{
  "title":"董事长、3名公司高管和2名中层人员被公安机关依法审查",
  "content":"财联社7月24日讯,长生生物公告称,董事长及部分高管无法正常履职,长春市长春新区公安分局对长春长生生产冻干人用狂犬病疫苗涉嫌违法犯罪案件立案调查,将主要涉案人员公司董事长、3名公司高管和2名中层人员带至公安机关依法审查",
  "author":"长生生物"
}

查询”title“或者”content“任一满足条件”销售“的文档

	/**
	 * 根据查询条件查询
	 */
	public static void matchQuery() {

		//QueryBuilder query = QueryBuilders.matchQuery("title", "董事高管").operator(Operator.AND);
		QueryBuilder query = QueryBuilders.multiMatchQuery("销售", "title","content");//
		SearchResponse response = getClient().prepareSearch("telegraph").setQuery(query).setSize(5).get();

		SearchHits searchHits = response.getHits();

		for (SearchHit searchHit : searchHits) {
			System.out.println(searchHit.getSourceAsString());
		}

	}

查询结果;

{"title":"宝泰隆:半年报预增140%-156%","content":"公司主要产品焦炭、甲醇销售量及销售价格较上年同期有较大的上涨","author":"宝泰隆","pubdate":"2018-07-17T17:16:30"}
{
  "title":"二甲苯销售报价大涨9.12%",
  "content":"财联社7月24日讯,据百川资讯,今日PX(对二甲苯)报价8140元/吨,涨9.12%,丁二烯报价1.33万元/吨,涨3.1%;维生素E涨2.56%;氧化钼涨2.4%;电解锰涨2.13%",
  "author":"财联社"
}

 

转载于:https://my.oschina.net/u/3100849/blog/1862044

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的ElasticSearch聚合的Java API示例: ```java import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.client.Client; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.aggregations.AggregationBuilders; import org.elasticsearch.search.aggregations.bucket.histogram.DateHistogramInterval; import org.elasticsearch.search.aggregations.bucket.histogram.Histogram; import org.elasticsearch.search.aggregations.bucket.terms.Terms; import org.elasticsearch.search.aggregations.metrics.sum.Sum; import org.elasticsearch.search.aggregations.metrics.valuecount.ValueCount; import static org.elasticsearch.index.query.QueryBuilders.rangeQuery; public class ElasticSearchAggregationExample { public static void main(String[] args) { // 创建ElasticSearch客户端 Client client = // ...; // 构建查询条件 QueryBuilder query = QueryBuilders.boolQuery() .must(rangeQuery("timestamp").gte("2022-01-01T00:00:00").lte("2022-01-31T23:59:59")); // 构建聚合条件 AggregationBuilder aggregation = AggregationBuilders .dateHistogram("sales_over_time") .field("timestamp") .dateHistogramInterval(DateHistogramInterval.DAY) .subAggregation( AggregationBuilders .terms("product_types") .field("product_type") .subAggregation( AggregationBuilders.sum("total_sales").field("sales"), AggregationBuilders.count("transaction_count").field("transaction_id") ) ); // 执行查询 SearchResponse response = client.prepareSearch("my_index") .setQuery(query) .addAggregation(aggregation) .execute() .actionGet(); // 解析聚合结果 Histogram histogram = response.getAggregations().get("sales_over_time"); for (Histogram.Bucket bucket : histogram.getBuckets()) { System.out.println("Date: " + bucket.getKeyAsString()); Terms productTypes = bucket.getAggregations().get("product_types"); for (Terms.Bucket productType : productTypes.getBuckets()) { System.out.println("Product Type: " + productType.getKeyAsString()); Sum totalSales = productType.getAggregations().get("total_sales"); System.out.println("Total Sales: " + totalSales.getValue()); ValueCount transactionCount = productType.getAggregations().get("transaction_count"); System.out.println("Transaction Count: " + transactionCount.getValue()); } } // 关闭客户端 client.close(); } } ``` 这个示例通过ElasticSearch的Java API执行了一个聚合,其中包含了两层嵌套聚合,分别按照日期和产品类型对销售数据进行了汇总,输出了每个日期和产品类型的销售总额和交易次数。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值