ES--创建--JestClient

创建es连接简单

1 导入依赖

<dependency>

<groupId>io.searchbox</groupId> 

<artifactId>jest</artifactId> 

<version>5.3.3</version> 

</dependency> 

<dependency> 。

<groupId>io.searchbox</groupId> 

<artifactId>jest-common</artifactId> 

<version>5.3.3</version> 

</dependency>

2 注入client对象就可以用啦

3优缺点

优点: 提供restful风格api,  访问安全,可以在http层添加安全

缺点: 比TransportClient慢

---------------------------------------------API示例---------------------------------------------------------

创建索引

创建索引字段

批量存储数据

单个数据存储

根据ID更新数据

删除索引

查询数据

-------------------------------------------查询条件API解释-------------------------------------------

1:查询所有

matchAllQuery()匹配所有文件

match_all查询是Elasticsearch中最简单的查询之一。它使我们能够匹配索引中的所有文件。

public SearchResult searchAll(String indexName) throws IOException {

SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();

searchSourceBuilder.query(QueryBuilders.matchAllQuery());

Search search = new Search.Builder(searchSourceBuilder.toString())

.addIndex(indexName)

.build();

SearchResult result = null ;

result = jestClient.execute(search);

return result;

}

2:解析查询字符串

相比其他可用的查询,query_string查询支持全部的Apache Lucene查询语法

针对多字段的query_string查询:字段名称可配可不配

public JestResult searchWithQuery(Map<String,Object> searchParams, String[] indexName, String[] indexType, String value) throws IOException {

SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();

searchSourceBuilder.query(QueryBuilders.queryStringQuery("测试"));

Search search = new Search.Builder(searchSourceBuilder.toString())

.addIndices(Arrays.asList(indexName)).build();

JestResult result = jestClient.execute(search);

return result;

}

3:通配符查询(wildcardQuery)

*匹配多个字符,?匹配1个字符

注意:避免* 开始, 会检索大量内容造成效率缓慢

public JestResult wildcardQuery(Map<String,Object> searchParams, String[] indexName, String[] indexType, String value) throws IOException {

SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();

searchSourceBuilder.query(QueryBuilders.wildcardQuery("mallname","测试"));

Search search = new Search.Builder(searchSourceBuilder.toString())

.addIndices(Arrays.asList(indexName)).build();

JestResult result = jestClient.execute(search);

return result;

}

4:词条查询(termQuery)

词条查询是Elasticsearch中的一个简单查询。它仅匹配在给定字段中含有该词条的文档,而且是确切的、未经分析的词条

termQuery("key", obj) 完全匹配

termsQuery("key", obj1, obj2..)

一次匹配多个值,有一个值是正确的,就可以查询出数据

public JestResult termQuery(Map<String,Object> searchParams, String[] indexName, String[] indexType, String value) throws IOException {

SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();

searchSourceBuilder.query(QueryBuilders.termsQuery("mallname","测试", "周", "保障"));

Search search = new Search.Builder(searchSourceBuilder.toString())

.addIndices(Arrays.asList(indexName)).build();

JestResult result = jestClient.execute(search);

return result;

}

5:字段匹配查询

match**查询把query参数中的值拿出来,加以分析,然后构建相应的查询**。使用match查询时,Elasticsearch将对一个字段选择合适的分析器,所以可以确定,传给match查询的词条将被建立索引时相同的分析器处理。

/**

* match query搜索的时候,首先会解析查询字符串,进行分词,然后查询,

而term query,输入的查询内容是什么,就会按照什么去查询,并不会解析查询内容,对它分词。

* */

public JestResult MatchQuery(Map<String,Object> searchParams, String[] indexName, String[] indexType, String value) throws IOException {

SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();

searchSourceBuilder.query(QueryBuilders.multiMatchQuery("mallname","测试", "周", "保障"));

Search search = new Search.Builder(searchSourceBuilder.toString())

.addIndices(Arrays.asList(indexName)).build();

JestResult result = jestClient.execute(search);

return result;

}

Matchquery 和termquery的区别:

match:匹配的时候,会将查询的关键字进行分词,然后根据分词后的结果进行查询。

term:直接使用关键字进行查询,不对关键字进行分词。

multiMatchQuery("text", "field1", "field2"..); 匹配多个字段

6:只查询ID(标识符查询)

标识符查询是一个简单的查询,仅用提供的标识符来过滤返回的文档。

/**

* 根据id查询

* @param id

* @return

*/

public JestResult searchById(String id, String indexName, String indexType) throws Exception {

Get build = new Get.Builder(indexName, id)

.index(indexName)

.type(indexType)

.build();

JestResult result = jestClient.execute(build);

return result;

}

7:范围查询

范围查询使我们能够找到在某一字段值在某个范围里的文档,字段可以是数值型,也可以是

基于字符串的

includeLower(true):包含上界

IncludeUpper(true):包含下界

/**

范围查询使我们能够找到在某一字段值在某个范围里的文档,字段可以是数值型,也可以是

基于字符串的

includeLower(true):包含上界

IncludeUpper(true):包含下界

* */

public JestResult rangeQuery(Map<String,Object> searchParams, String[] indexName, String[] indexType, String value) throws IOException {

SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();

searchSourceBuilder.query(QueryBuilders.rangeQuery("costprice").from(300).to(1000).includeLower(true).includeUpper(false));

Search search = new Search.Builder(searchSourceBuilder.toString())

.addIndices(Arrays.asList(indexName)).build();

JestResult result = jestClient.execute(search);

return result;

}

8:组合查询(复杂查询)

must(QueryBuilders) : AND

mustNot(QueryBuilders): NOT

should(QueryBuilders):OR

public JestResult boolQuery(Map<String,Object> searchParams, String[] indexName, String[] indexType, String value) throws IOException {

SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();

BoolQueryBuilder filterQueryBuilders = QueryBuilders.boolQuery();

filterQueryBuilders.must(QueryBuilders.matchQuery("address", "程序员")).must(QueryBuilders.termQuery("male", "女"));

searchSourceBuilder.postFilter(filterQueryBuilders);

Search search = new Search.Builder(searchSourceBuilder.toString())

.addIndices(Arrays.asList(indexName)).build();

JestResult result = jestClient.execute(search);

return result;

}

9:排序查询:注意排序字段只能是数字或日期

/**

* ASC : 正序(从小到大)

* DESC: 倒序(从大到小)

* */

public JestResult SortOrderQuery(Map<String,Object> searchParams, String[] indexName, String[] indexType, String value) throws IOException {

SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();

searchSourceBuilder.query(QueryBuilders.matchAllQuery());

Sort sort = new Sort("paytime", Sort.Sorting.DESC);

Search search = new Search.Builder(searchSourceBuilder.toString())

.addIndices(Arrays.asList(indexName))

.addSort(sort)

.build();

JestResult result = jestClient.execute(search);

return result;

}

10:分页查询:

/**

* 分页查找记录

* @param type

* @param searchParams

* @return

*/

public PageInfo searchRecords(String[] index,String[] type, Map<String,Object> searchParams) throws IOException {

SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();

BoolQueryBuilder filterQueryBuilders = QueryBuilders.boolQuery();

for (Map.Entry<String,Object> entry : searchParams.entrySet()) {

filterQueryBuilders.must(QueryBuilders.queryStringQuery((String) entry.getValue()).field(entry.getKey()).defaultOperator(Operator.AND));

}

searchSourceBuilder.postFilter(filterQueryBuilders);

searchSourceBuilder.from(1).size(3);

// Sort sort = new Sort("time", Sort.Sorting.DESC);

Search search = new Search.Builder(searchSourceBuilder.toString())

.addIndices(Arrays.asList(index)).build();

JestResult result = jestClient.execute(search);

int hitCount = result.getJsonObject().get("hits").getAsJsonObject().get("total").getAsInt();

PageInfo pageInfo = new PageInfo<>();

pageInfo.setList(result.getSourceAsObjectList(TestBean.class));

pageInfo.setPageNum(1);

pageInfo.setPageSize(3);

pageInfo.setTotal(hitCount);

pageInfo.setSize((int) (hitCount / 3) + 1);

if (result != null && result.isSucceeded()){

return pageInfo;

}

return null;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值