1. 程式人生 > >大資料學習[21]---java操作ES一例

大資料學習[21]---java操作ES一例

一個常用的java操作ES的例子:

//GET info/_search
//{
//  "query": {
//    "nested": {
//      "path": "keywords02",
//      "score_mode": "max",
//      "query": {
//        "function_score": {
//          "query": {
//            "bool": {
//              "must": [
//                {
//                  "match": {
//                    "keywords02.keyword": {
// "query": "高血壓", // "analyzer": "xxxx_xxx_analyzer" // } // } // } // ], // "must_not": { // "terms": { // "_id": [ // "63356", // "5408",
// "24618" // ] // } // } // } // }, // "functions": [ // { // "script_score": { // "script": "_score * doc['keywords02.weight'].value" // } // } // ] // } // }
// } // } // , // "collapse": { // "field": "keywords01.raw" // } //} package sparkml.es; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.Arrays; import java.util.List; import org.apache.lucene.search.join.ScoreMode; import org.elasticsearch.action.search.SearchRequestBuilder; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.action.search.SearchType; import org.elasticsearch.client.transport.TransportClient; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.transport.InetSocketTransportAddress; import org.elasticsearch.index.query.NestedQueryBuilder; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.index.query.functionscore.FunctionScoreQueryBuilder; import org.elasticsearch.index.query.functionscore.FunctionScoreQueryBuilder.FilterFunctionBuilder; import org.elasticsearch.index.query.functionscore.ScoreFunctionBuilders; import org.elasticsearch.search.SearchHits; import org.elasticsearch.search.collapse.CollapseBuilder; import org.elasticsearch.xpack.client.PreBuiltXPackTransportClient; @SuppressWarnings("unchecked") public class demoEs { private static TransportClient client = null; static { // 設定叢集名稱 Settings settings = Settings.builder().put("cluster.name", "***") .put("xpack.security.user", "elastic:changeme")// xpack使用者名稱密碼 .build(); // 建立client try { client = new PreBuiltXPackTransportClient(settings) .addTransportAddress( new InetSocketTransportAddress(InetAddress .getByName("***.***.***.***"), 9300)) .addTransportAddress( new InetSocketTransportAddress(InetAddress .getByName("***.***.***.***"), 9300)); } catch (UnknownHostException e) { e.printStackTrace(); } } public static void getArticleInfoByTags(String tags, List<String> filterList) throws Exception { // SearchRequestBuilder responsebuilder = client.prepareSearch("info") .setTypes("articles") .setSearchType(SearchType.QUERY_THEN_FETCH); // 1. pics過濾 NestedQueryBuilder picsFilter = QueryBuilders.nestedQuery( "pics", QueryBuilders.boolQuery() .must(QueryBuilders.matchQuery("pics.is_down", "1")) .must(QueryBuilders.matchQuery("pics.is_qr", "0")), ScoreMode.Avg); // 2. 關鍵詞權重計算過濾,過濾ID // ---------keyword查詢 NestedQueryBuilder kwIDsQuery = QueryBuilders.nestedQuery( "keywords02", QueryBuilders .boolQuery() .must(QueryBuilders.matchQuery("keywords02.keyword", tags).analyzer("xxxx_xxx_analyzer")) .mustNot(QueryBuilders.termsQuery("_id", filterList)), ScoreMode.Avg); // ---------權重分數函式 FilterFunctionBuilder[] keyWeithFunctionBuilders = { new FunctionScoreQueryBuilder.FilterFunctionBuilder( // 這裡把_score * doc['keywords02.weight'].value修改成了隨機化 ScoreFunctionBuilders.randomFunction(Math.round(Math.random() * 100)) ) }; // ---kw函式權重查詢 FunctionScoreQueryBuilder query = QueryBuilders.functionScoreQuery( kwIDsQuery, keyWeithFunctionBuilders); // 綜合查詢 SearchResponse myresponse = responsebuilder.setQuery(query) .setPostFilter(picsFilter) .setCollapse(new CollapseBuilder("keywords01.raw")).setFrom(0) .setSize(5).get(); System.out.println(myresponse.toString()); SearchHits hits = myresponse.getHits(); System.out.println(hits.totalHits); for (int i = 0; i < hits.getHits().length; i++) { String sourceAsString = hits.getHits()[i].getSourceAsString(); System.out.println(sourceAsString); } } public static void main(String[] args) throws Exception { String tags = "高血壓"; String[] fls = { "63356", "5408", "24618" }; List<String> filterList = Arrays.asList(fls); demoEs.getArticleInfoByTags(tags, filterList); } }

注意:ES中的查詢與過濾,過濾完之後,對於score會有損失的。

相關推薦

資料學習[21]---java操作ES

一個常用的java操作ES的例子: //GET info/_search //{ // "query": { // "nested": { // "path": "keywords02", // "score_mode": "m

資料學習[11]:JAVA連線elasticsearch5.6.1操作|問題|分析

摘要:通過JAVA API操作elasticsearch5.6.1的連線及連線過程中所遇到的問題,問題分析,問題解決。作為一個ES的JAVA操作的新生參考與記錄。 0. 官方文件 1. 建立工程 建立一個mave工程 2. 日誌配

資料學習初級入門教程() —— Hadoop 2.x 的安裝、啟動和測試

大資料最基礎的就是資料的儲存和計算,而 Hadoop 就是為儲存和計算而生,是最基礎的大資料處理工具。這篇簡單寫寫 Hadoop 2.x 的安裝,啟動和測試。 一、準備環境 大資料環境的部署,一般都是叢集,機器數量為奇數,這裡以 5 臺機器為例,作業系統為 CentOS 6.9_x64;

玩轉資料之——通過java操作office/wps的 EXCEL

操作Office文件,要用到apache公司的一個工具包: poi-3.7-20101029.jar poi外掛的使用方式類似dom技術 不同版本: 接下來進行演示功能: 1.用純Java技術實現建立一個名為a.xls的檔案(工作薄), 在其中新

資料學習筆記——Java篇之集合框架(ArrayList)

Java集合框架學習筆記 1. Java集合框架中各介面或子類的繼承以及實現關係圖:   2. 陣列和集合類的區別整理: 陣列: 1. 長度是固定的 2. 既可以存放基本資料型別又可以存放引用資料型別 3. 存放進陣列的必須是相同型別的資料 VS 集合類: 1. 長度是可變的 2. 只能存放物件的

Atittit HDFS hadoop 資料檔案系統java使用總結 目錄 1. 作業系統,進行操作 1 2. Hdfs 類似nfs ftp遠端分散式檔案服務 2 3. 啟動hdfs服務start

Atittit HDFS hadoop 大資料檔案系統java使用總結   目錄 1. 作業系統,進行操作 1 2. Hdfs 類似nfs ftp遠端分散式檔案服務 2 3. 啟動hdfs服務start-dfs.cmd 2 3.1. 配置core-site

入門到精通:資深程式設計師規劃JAVA資料學習路線(附視訊教程)

人類正在從IT時代走向DT(Data Technology)的時代。以網際網路、雲端計算、大資料和人工智慧為代表的技術革命正在滲透至各行各業,改變著我們的生活。 本文主要針對從事大資料開發的程式設計師們整理了整套的大資料學習相關的路線圖和知識材料,希望能幫助到大家。 很多初學者,對大資

阿里年薪50萬的JAVA工程師轉資料學習路線!

大資料有兩個方向,一個是偏計算機的,另一個是偏經濟的。你學過Java,所以你可以偏將計算機的。 Java程式設計師想轉大資料可行嗎?Java是全世界使用人數最多的程式語言。不少程式設計師選擇Java做為了自己的程式設計第一語言,但隨之而來的是Java程式設計師接近飽和的人才市場。由此,隨

如何學習資料?首先你需要條這樣的資料學習路線

最近很多人問我現在學習大資料這麼多,他們都是如何學習的呢。很多初學者在萌生向大資料方向發展的想法之後,不免產生一些疑問,應該怎樣入門?應該學習哪些技術?學習路線又是什麼?今天小編特意為大家整理了一份大資料從入門到精通的學習路線。並且附帶學習資料和視訊。希望能夠幫助到大家。 第一階段:Lin

Java資料學習

背景 近年來大資料BigData、人工智慧AI、物聯網Iot等行業發展迅猛,很多人都想要從事大資料技術開發工作,但是,請問要怎麼做,路線是什麼?從哪裡開始學?學哪些?這是一個大問題。對於我自己來說,最近也在學一些大資料開發相關的技術,所以之前整理了一份《大資料技術學習路線》,希望對你有所幫助。

java資料學習路線

第一階段:大資料基礎Java語言基礎階段 1.1:Java開發介紹 1.1.1 Java的發展歷史 1.1.2 Java的應用領域 1.1.3 Java語言的特性 1.1.4 Java面向物件 1.1.5 Java效能分類 1.1.6 搭建Java環境 1.1.7 J

學習筆記:從0開始學習資料-7.hbase java程式設計hello world

上節搭建了hbase啟動環境,本節搭建hbase程式設計環境 1. 準備測試資料,建立表student #hbase shell create 'student','info','address' put 'student','1','info:age','20' put 'studen

資料學習之ubuntu的基礎操作

時隔兩個星期,學習了和複習了大資料的一些基本操作,第一系列是ubuntu的基礎!   基礎涉及到:     1.virtualBOX的安裝和使用     2.FTP工具傳輸     3.root使用者密碼設定和vim的安裝     4.建立使用者並設定許可權:這裡使用Hadoop使用者     5

資料學習記錄,

hadoop學習  一。 WordCount程式打成jar包放在叢集中執行     點選Finish會彈個窗體點選OK即可 最後  下載本地之後上傳到Xmanager Enterprise 5 中的 xftp 中  建個檔案

資料學習之路【跟著阿里雲大神學習波】

一、大資料相關的工作介紹 二、大資料工程師的技能要求 三、大資料學習規劃 四、持續學習資源推薦(書籍,部落格,網站) 五、專案案例分析(批處理+實時處理) 大資料介紹 大資料本質也是資料,但是又有了新的特徵,包括資料來源廣、資料格式多樣化(結構化資料、非結構化資料、

資料學習之Hbase shell的基本操作

HBase的命令列工具,最簡單的介面,適合HBase管理使用,可以使用shell命令來查詢HBase中資料的詳細情況。安裝完HBase之後,啟動hadoop叢集(利用hdfs儲存),啟動zookeeper,使用start-hbase.sh命令開啟hbase服務,最後在shel

資料學習() --資料概述

#大資料興起的背景 --第三次資訊化浪潮 ##技術支撐 +硬碟儲存容量增加; +CPU計算速度提高; +網路頻寬不斷增加。 ##資料產生方式的變革。 :感知式系統階段:物聯網的大規模普及。(物聯網底層是感知層:RFID,攝像頭,感測器) :*

資料學習之早課2018.9.21

1.pwd是什麼意思 顯示當前游標所在路徑 2.cd切換到上一層和上一次命令 cd …/ cd - 3.which cat,顯示出來的路徑,是從哪個環境變數引數的 $PATH 4.當前資料夾搜含有abc的檔案和資料夾名稱 find ./ -name ‘abc’

份詳細的資料學習路線圖

  Hadoop大資料學習線路圖 入門知識 對於我們新手入門學習hadoop的朋友來說,首先了解一下雲端計算和雲端計算技術是有必要的。下面先是介紹雲端計算和雲端計算技術的: 雲端計算,是一種基於網際網路的計算方式,通過這種方式,共享的軟硬體資源和資訊可以按需求提供給計算機

免費的資料學習資料,這份就足夠

  朋友不在於多,知心就好;資料不在於多,精緻就好。一份專業的大資料學習資料才是學習大資料的利刃。小編分享的這套大資料學習資料將從學習大綱、書籍、視訊教程分別分享。  大資料學習資料之大資料學習大綱  階段一、 Java語言基礎  Java開發介紹、熟悉Eclipse開發工具