日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Elasticsearch5.X的java配置

發(fā)布時(shí)間:2023/12/6 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Elasticsearch5.X的java配置 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

pom:

<properties><elasticsearch.version>5.4.1</elasticsearch.version><transport.version>5.4.1</transport.version></properties><!--elasticsearch相關(guān)依賴--><dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch</artifactId><version>${elasticsearch.version}</version></dependency><dependency><groupId>org.elasticsearch.client</groupId><artifactId>transport</artifactId><version>${transport.version}</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.7</version></dependency></dependencies> 復(fù)制代碼

config:

@Configuration public class ElasticsearchConfig {@Beanpublic TransportClient transportClient() throws UnknownHostException {// 一定要注意,9300為elasticsearch的tcp端口InetSocketTransportAddress master = new InetSocketTransportAddress(InetAddress.getByName("47.104.160.160"), 9300);// 集群名稱Settings settings = Settings.builder().put("cluster.name", "es-cluster").build();TransportClient client = new PreBuiltTransportClient(settings);// 添加client.addTransportAddresses(master);return client;} } 復(fù)制代碼

utils:

@Component public class ElasticsearchUtils {private static final Logger LOGGER = LoggerFactory.getLogger(ElasticsearchUtils.class);@Autowiredprivate TransportClient transportClient;private static TransportClient client;@PostConstructpublic void init() {client = this.transportClient;}public static void searchModel(Integer pageNo, Integer pageSize) throws Exception {SearchResponse searchResponse = client.prepareSearch(EsConstants.INDEX)//指定索引庫(kù).setTypes(EsConstants.TYPE)//指定類型// .setQuery(QueryBuilders.matchQuery("name", "tom"))//指定查詢條件,這里不支持通配符 * ?.setQuery(QueryBuilders.matchAllQuery())//查詢所有.setQuery(QueryBuilders.multiMatchQuery("tom", "name", "title"))//支持一個(gè)值同時(shí)匹配多個(gè)字段.setQuery(QueryBuilders.queryStringQuery("name:to?"))//支持lucene的語(yǔ)法 AND OR,通配符 * ? 如果對(duì)lucene比較熟悉,或者是想用通配符,可以使用這個(gè).setQuery(QueryBuilders.boolQuery().must(QueryBuilders.matchQuery("name", "tom")).mustNot(QueryBuilders.matchQuery("age", 16)))//組合查詢,支持多個(gè)查詢條件,并且可以給查詢條件設(shè)置權(quán)重.setQuery(QueryBuilders.boolQuery().should(QueryBuilders.matchQuery("name", "zs").boost(8.0f)).should(QueryBuilders.matchQuery("age", 19).boost(1.0f)))//組合查詢,支持多個(gè)查詢條件,并且可以給查詢條件設(shè)置權(quán)重.setQuery(QueryBuilders.termQuery("name", "tom zhang"))//精確查詢 主要針對(duì)人名 還有地名//注意:一般需要精確查詢的字段,在存儲(chǔ)的時(shí)候都不建議分詞。但是已經(jīng)分詞了,還想精確精確查詢,使用queryStringQuery,在需要精確查詢的詞語(yǔ)外面使用雙引號(hào)引起來(lái).setQuery(QueryBuilders.queryStringQuery("name:\"tom zhang\"")).setQuery(QueryBuilders.matchQuery("name", "tom zhang").operator(Operator.AND))//AND的意思是 返回的數(shù)據(jù)中必須包含 你好 和 中國(guó)這兩個(gè)詞 OR的意思是只包含一個(gè)詞即可/*** lt:小于* lte:小于等于* gt:大于* gte:大于等于*///過(guò)濾,默認(rèn)是閉區(qū)間// .setPostFilter(QueryBuilders.rangeQuery("age").from(18).to(19).includeLower(true).includeUpper(true))// 10=<x<=20這個(gè)過(guò)濾條件可以緩存,多次查詢效率高// .setPostFilter(QueryBuilders.rangeQuery("age").gte(18).lte(19))// .setPostFilter(QueryBuilders.rangeQuery("age").gte(18).lt(19)).setPostFilter(QueryBuilders.rangeQuery("age").gt(17).lt(19))// .setPostFilter(FilterBuilders.rangeFilter("age").gte(10).lt(18))//實(shí)現(xiàn)分頁(yè),分頁(yè)參數(shù).setFrom(0).setSize(10).addSort("age", SortOrder.DESC)//ASC是升序,DESC是倒序.get();SearchHits hits = searchResponse.getHits();Long total = hits.getTotalHits();Long pages = total % pageSize == 0 ? total / pageSize : total / pageSize + 1;Integer currentNo = pageNo;//獲取滿足條件數(shù)據(jù)的詳細(xì)內(nèi)容List<String> datas = new ArrayList<>();SearchHit[] hits2 = hits.getHits();for (SearchHit searchHit : hits2) {datas.add(searchHit.getSourceAsString());}}public static Map<String, Object> searchDefault(Integer pageNo, Integer pageSize) throws Exception {Integer startIndex = (pageNo - 1) * pageSize;SearchResponse searchResponse = client.prepareSearch(EsConstants.INDEX)//指定索引庫(kù).setTypes(EsConstants.TYPE)//指定類型.setQuery(QueryBuilders.matchAllQuery())//查詢所有//實(shí)現(xiàn)分頁(yè),分頁(yè)參數(shù).setFrom(startIndex).setSize(pageSize).addSort(EsConstants.FIELD_PAYMANCOUNTS, SortOrder.DESC)//ASC是升序,DESC是倒序.get();SearchHits hits = searchResponse.getHits();Long total = hits.getTotalHits();Long pages = total % pageSize == 0 ? total / pageSize : total / pageSize + 1;Integer currentNo = pageNo;SearchHit[] hits2 = hits.getHits();return getResultList(hits2, currentNo, pages, total);}// public static Map<String, Object> searchByShopOrPrice(Integer pageNo, Integer pageSize, String sortBy, String str) throws Exception { // Integer startIndex = (pageNo - 1) * pageSize; // SearchResponse searchResponse = null; // if (str == null) { // str = "*"; // } else { // str = "*" + str + "*"; // } // if (sortBy != null) { // if ("DESC".equals(sortBy)) { // searchResponse = client.prepareSearch(EsConstants.INDEX)//指定索引庫(kù) // .setTypes(EsConstants.TYPE)//指定類型 // .setQuery(QueryBuilders.queryStringQuery(EsConstants.FIELD_GOODSNAME + ":" + str)) // //實(shí)現(xiàn)分頁(yè),分頁(yè)參數(shù) // .setFrom(startIndex) // .setSize(pageSize) // .addSort(EsConstants.FIELD_PRICE, SortOrder.DESC)//ASC是升序,DESC是倒序 // .get(); // } else { // searchResponse = client.prepareSearch(EsConstants.INDEX)//指定索引庫(kù) // .setTypes(EsConstants.TYPE)//指定類型 // .setQuery(QueryBuilders.queryStringQuery(EsConstants.FIELD_GOODSNAME + ":" + str)) // //實(shí)現(xiàn)分頁(yè),分頁(yè)參數(shù) // .setFrom(startIndex) // .setSize(pageSize) // .addSort(EsConstants.FIELD_PRICE, SortOrder.ASC)//ASC是升序,DESC是倒序 // .get(); // } // } else { // searchResponse = client.prepareSearch(EsConstants.INDEX)//指定索引庫(kù) // .setTypes(EsConstants.TYPE)//指定類型 // .setQuery(QueryBuilders.queryStringQuery(EsConstants.FIELD_GOODSNAME + ":" + str)) // //實(shí)現(xiàn)分頁(yè),分頁(yè)參數(shù) // .setFrom(startIndex) // .setSize(pageSize) // .get(); // } // SearchHits hits = searchResponse.getHits(); // Long total = hits.getTotalHits(); // Long pages = total % pageSize == 0 ? total / pageSize : total / pageSize + 1; // Integer currentNo = pageNo; // SearchHit[] hits2 = hits.getHits(); // return getResultList(hits2, currentNo, pages, total); // // }public static Map<String, Object> searchByAll(Integer pageNo, Integer pageSize, String sortBy, String sortColumn, String str, Integer isOnSale, Integer isOnlyFamily, Integer isInStore, BigDecimal minPrice, BigDecimal maxPrice, Long catId, Long brandId) throws Exception {Integer startIndex = (pageNo - 1) * pageSize;SearchResponse searchResponse = null;SearchRequestBuilder searchRequestBuilder = client.prepareSearch(EsConstants.INDEX)//指定索引庫(kù).setTypes(EsConstants.TYPE);//指定類型if (str == null) {searchRequestBuilder.setQuery(QueryBuilders.matchAllQuery());//查詢所有} else {searchRequestBuilder.setQuery(QueryBuilders.boolQuery().should(QueryBuilders.matchQuery(EsConstants.FIELD_SHOPGOODSNAME, str).boost(8.0f)).should(QueryBuilders.matchQuery(EsConstants.FIELD_CATEGORYNAME, str).boost(8.0f)).should(QueryBuilders.matchQuery(EsConstants.FIELD_MARKETINGACTIVITIESLIST, str).boost(8.0f)));}if (brandId != null) {searchRequestBuilder.setQuery(QueryBuilders.termQuery(EsConstants.FIELD_BRANDID, brandId));//精確查詢 品牌Id}if (catId != null) {searchRequestBuilder.setQuery(QueryBuilders.termQuery(EsConstants.FIELD_CATID, catId));//精確查詢 類目ID}if (minPrice != null) {searchRequestBuilder.setPostFilter(QueryBuilders.rangeQuery(EsConstants.FIELD_PRICE).gte(minPrice.toString()));//過(guò)濾查詢 價(jià)格高于低價(jià)}if (maxPrice != null) {searchRequestBuilder.setPostFilter(QueryBuilders.rangeQuery(EsConstants.FIELD_PRICE).lte(minPrice.toString()));//過(guò)濾查詢 價(jià)格低于高價(jià)}if (isOnSale != null && isOnSale == 1 ) {searchRequestBuilder.setPostFilter(QueryBuilders.rangeQuery(EsConstants.FIELD_ISMARKETINGACTIVITIES).gt("0"));//過(guò)濾查詢 促銷中商品}if (isInStore != null && isInStore == 1 ) {searchRequestBuilder.setPostFilter(QueryBuilders.rangeQuery(EsConstants.FIELD_ISHAVESTORE).gt("0"));//過(guò)濾查詢 有貨商品}if (isOnlyFamily != null && isOnlyFamily == 1) {searchRequestBuilder.setQuery(QueryBuilders.termQuery(EsConstants.FIELD_ISFAMILYONLY, "1"));//精確查詢 家庭會(huì)員專享}if(sortColumn!=null){if (sortBy != null ) {if ("DESC".equals(sortBy)) {searchRequestBuilder.addSort(sortColumn, SortOrder.DESC);//ASC是升序,DESC是倒序}if ("ASC".equals(sortBy)) {searchRequestBuilder.addSort(sortColumn, SortOrder.ASC);//ASC是升序,DESC是倒序}}}//實(shí)現(xiàn)分頁(yè),分頁(yè)參數(shù)searchRequestBuilder.setFrom(startIndex).setSize(pageSize);searchResponse = searchRequestBuilder.get();SearchHits hits = searchResponse.getHits();Long total = hits.getTotalHits();Long pages = total % pageSize == 0 ? total / pageSize : total / pageSize + 1;Integer currentNo = pageNo;SearchHit[] hits2 = hits.getHits();return getResultList(hits2, currentNo, pages, total);}private static Map<String, Object> getResultList(SearchHit[] hits, Integer currentNo, Long pages, Long total) {List<Map<String, Object>> datas = new ArrayList<>();for (SearchHit searchHit : hits) {JSONObject json = JSON.parseObject(searchHit.getSourceAsString());System.out.println(json.toString());Map<String, Object> map = new HashMap<>();map.put("alterempl", json.getString("alterempl"));map.put("altertime", json.getString("altertime"));map.put("categoryid", json.getString("categoryid"));map.put("categoryname", json.getString("categoryname"));map.put("createempl", json.getString("createempl"));map.put("createtime", json.getString("createtime"));map.put("esid", json.getString("esid"));map.put("goodsid", json.getString("goodsid"));map.put("id", json.getLong("id"));map.put("isfamilyonly", json.getByte("isfamilyonly"));map.put("ishavestore", json.getByte("ishavestore"));map.put("ismarketingactivities", json.getByte("ismarketingactivities"));map.put("marketingactivitieslist", json.getString("marketingactivitieslist"));map.put("paymancounts", json.getLong("paymancounts"));map.put("price", json.getBigDecimal("price"));map.put("remark", json.getString("remark"));map.put("shopgoodsname", json.getString("shopgoodsname"));map.put("shopid", json.getString("shopid"));map.put("shopname", json.getString("shopname"));map.put("shopphotourl", json.getString("shopphotourl"));map.put("shopscore", json.getBigDecimal("shopscore"));map.put("timestamp", json.getString("timestamp"));map.put("validstatus", json.getByte("validstatus"));datas.add(map);}Map<String, Object> resultMap = new HashMap<>();resultMap.put("currPageNo", currentNo);resultMap.put("pageNos", pages);resultMap.put("total", total);resultMap.put("datas", datas);return resultMap;}//添加索引public static void addIndex(String index, String type, String id) throws Exception {IndexResponse response = client.prepareIndex(index, type, id).setSource(jsonBuilder().startObject().field("user", "kimchy").field("postDate", new Date()).field("message", "trying out Elasticsearch").endObject()).get();System.out.println(response.getId());}//刪除索引public static void deleteIndex(String index, String type, String id) throws Exception {DeleteResponse response = client.prepareDelete(index, type, id).get();}```復(fù)制代碼

總結(jié)

以上是生活随笔為你收集整理的Elasticsearch5.X的java配置的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。