久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      ElasticSearch[v6.2] 在實(shí)際項(xiàng)目中的應(yīng)用

       摘要:本文所講述的內(nèi)容,為ElasticSearch(以下簡稱ES)全文搜索引擎在實(shí)際大數(shù)據(jù)項(xiàng)目的應(yīng)用;ES的底層是開源庫 Lucene。但是,你沒法直接用 Lucene,必須自己寫代碼去調(diào)用它的接口。ES 是 Lucene 的封裝,java開發(fā),提供了 REST API 的操作接口,開箱即用,是目前全文搜索的首選;

      本文的使用項(xiàng)目為基于Spring Boot 的快速開發(fā)環(huán)境搭建的項(xiàng)目框架,使用Spring Cloud作為服務(wù)治理的框架;集成ES的過程中,考慮過使用Spring Data的方式集成,進(jìn)行數(shù)據(jù)的對(duì)接,后面通過多方面的調(diào)研和學(xué)習(xí)討論,最終確定了bboss的集成方案,一個(gè) 高性能elasticsearch ORM開發(fā)庫使用介紹,在這里特別感謝bboss的作者大河和他的團(tuán)隊(duì)提供的幫助;

      一、ES基礎(chǔ)

      網(wǎng)上關(guān)于ES的介紹已經(jīng)特別多,這里將不再進(jìn)行詳細(xì)介紹,只是針對(duì)幾個(gè)重點(diǎn)進(jìn)行說明;

        1、Index (索引)–可以理解為關(guān)系型數(shù)據(jù)庫中的 數(shù)據(jù)庫的概念

        一個(gè)索引就是含有某些相似特性的文檔的集合。例如,你可以有一個(gè)用戶數(shù)據(jù)的索引,一個(gè)產(chǎn)品目錄的索引,還有其他的有規(guī)則數(shù)據(jù)的索引。一個(gè)索引被一個(gè)名稱(必須都是小寫)唯一標(biāo)識(shí),并且這個(gè)名稱被用于索引通過文檔去執(zhí)行索引,搜索,更新和刪除操作。

        2、Type(類型)–可以理解為關(guān)系型數(shù)據(jù)庫中的 表的概念(6.2版本中一個(gè)index下只有一個(gè)Type)

        3、Document(文檔)–可以理解為關(guān)系型數(shù)據(jù)庫中表的ROW

        一個(gè)文檔是一個(gè)可被索引的數(shù)據(jù)的基礎(chǔ)單元。例如,你可以給一個(gè)單獨(dú)的用戶創(chuàng)建一個(gè)文檔,給單個(gè)產(chǎn)品創(chuàng)建一個(gè)文檔,以及其他的單獨(dú)的規(guī)則。這個(gè)文檔用JSON格式表現(xiàn),JSON是一種普遍的網(wǎng)絡(luò)數(shù)據(jù)交換格式。

        4、Field(字段)–相當(dāng)于表中的COLUMN

        5、在一個(gè)關(guān)系型數(shù)據(jù)庫里面,schema定義了表、每個(gè)表的字段,還有表和字段之間的關(guān)系。 與之對(duì)應(yīng)的,在ES中:Mapping定義索引下的Type的字段處理規(guī)則,即索引如何建立、索引類型、是否保存原始索引JSON文檔、是否壓縮原始JSON文檔、是否需要分詞處理、如何進(jìn)行分詞處理等。

         6、ELK是什么?

        ELK=elasticsearch+Logstash+kibana
        elasticsearch:后臺(tái)分布式存儲(chǔ)以及全文檢索
        logstash: 日志加工、“搬運(yùn)工”
        kibana:數(shù)據(jù)可視化展示。 特別是在DSL的學(xué)習(xí)過程中,相當(dāng)于數(shù)據(jù)庫的可視化工具,實(shí)時(shí)交互操作。
        ELK架構(gòu)為數(shù)據(jù)分布式存儲(chǔ)、可視化查詢和日志解析創(chuàng)建了一個(gè)功能強(qiáng)大的管理鏈。 三者相互配合,取長補(bǔ)短,共同完成分布式大數(shù)據(jù)處理工作。

        二、ES能解決什么樣的問題?

        實(shí)際項(xiàng)目開發(fā)實(shí)戰(zhàn)中,幾乎每個(gè)系統(tǒng)都會(huì)有一個(gè)搜索的功能,當(dāng)搜索做到一定程度時(shí),維護(hù)和擴(kuò)展起來難度就會(huì)慢慢變大,所以很多公司都會(huì)把搜索單獨(dú)獨(dú)立出一個(gè)模塊,用ElasticSearch等來實(shí)現(xiàn)。近年ElasticSearch發(fā)展迅猛,已經(jīng)超越了其最初的純搜索引擎的角色,現(xiàn)在已經(jīng)增加了數(shù)據(jù)聚合分析(aggregation)和可視化的特性,如果你有數(shù)百萬的文檔需要通過關(guān)鍵詞進(jìn)行定位時(shí),ElasticSearch肯定是最佳選擇。當(dāng)然,如果你的文檔是JSON的,你也可以把ElasticSearch當(dāng)作一種“NoSQL數(shù)據(jù)庫”, 應(yīng)用ElasticSearch數(shù)據(jù)聚合分析(aggregation)的特性,針對(duì)數(shù)據(jù)進(jìn)行多維度的分析。

        而在本文的項(xiàng)目中,輿情監(jiān)測部分,搜索功能將是該模塊的核心功能;包括條件檢索,中文分詞,全文搜索等功能,而BBOSS對(duì)于該部分功能的實(shí)現(xiàn),提供了極大的便利;

        三、ES環(huán)境搭建和在項(xiàng)目中的應(yīng)用

        1、ES集群搭建,關(guān)于ES集群的搭建,這里不再單獨(dú)介紹,推薦的博客特別多。但有一點(diǎn)要注意,就是不同版本的ES對(duì)于功能的支持會(huì)有一些區(qū)別,要注意;

        2、ES的查詢語法;項(xiàng)目集成BBOSS后,比較類似Mybatis框架,直接完成DSL語句的編寫放入XML,通過對(duì)應(yīng)的DAO方法調(diào)用即可,所以ES的查詢語法是ES學(xué)習(xí)的重點(diǎn),也是ES進(jìn)階的重點(diǎn),不同的需求對(duì)于DSL的查詢復(fù)雜度不一,可以通過ES的中文官方網(wǎng)站進(jìn)行閱讀學(xué)習(xí),并在自身搭建的ES集群提供的kibana中進(jìn)行操作,ES權(quán)威中文指南

        3、項(xiàng)目集成bboss

        第一步、maven引入包

      <dependency>
          <groupId>com.bbossgroups.plugins</groupId>
          <artifactId>bboss-elasticsearch-rest</artifactId>
          <version>5.0.6.3</version>
      </dependency>

        第二步、bboss elasticsearch配置

      運(yùn)行bboss es需要三個(gè)配置文件,放到資源目錄(resources)的conf目錄下即可:

      conf/elasticsearch.xml        es客戶端配置文件

      conf/httpclient.xml            es http連接池配置文件

      conf/elasticsearch.properties  es參數(shù)配置文件,在上面的兩個(gè)xml文件中引用,所以我們只需要修改elasticsearch.properties即可。
        第三步、配置ES查詢DSL

      在resources下創(chuàng)建配置文件estrace/xxx.xml,配置一個(gè)query dsl腳本,名稱為queryServiceByCondition,我們將在后面的ClientInterface 組件中通過queryServiceByCondition引用這個(gè)腳本,定義腳本內(nèi)容;

      加載query dsl文件,并執(zhí)行查詢操作

        @Override
        public String searchInfo(JSONObject jsonObject) {
              Map<String, Object> params = formatParams(jsonObject);
              JSONObject result = new JSONObject();
              //創(chuàng)建加載配置文件的客戶端工具,用來檢索文檔,單實(shí)例多線程安全
              ClientInterface clientUtil = ElasticSearchHelper.getConfigRestClientUtil(“esmapper/opinion.xml”);
              ESDatas<OpinionInfo> esDatas = clientUtil.searchList(“act_yq_info_summary/_search”,//act_yq_info_summary為索引名稱,search為操作的action
                      “searchOpinionInfo”,//esmapper/opinion.xml中定義的dsl語句
                      params, OpinionInfo.class);
              result.put(“esDatas”, esDatas);
              return JSONObject.toJSONString(result);
          }

      關(guān)于BBOSS語法的具體學(xué)習(xí),可以移步到  高性能elasticsearch ORM開發(fā)庫使用介紹,或者入QQ群 166471282

        4、提供一個(gè)mapping設(shè)置和dsl的示例,僅供參考;

      PUT /act_yq_info_summary/

        “settings”:{ 
            “number_of_shards”:6,
            “index.refresh_interval”: “5s”,
            “analysis” : {
                “analyzer” : {
                      “ik” : {
                          “tokenizer” : “ik_max_word”
                      }
                  }
              }
        },
        “mappings”:{ 
            “articles”:{ 
              “dynamic_date_formats”:[ 
                  “yyyy-MM-dd HH:mm:ss”,
                  “yyyyMMdd”,
                  “yyyy-MM-dd”
              ],
              “dynamic”:”false”,
              “properties”:{ 
                  “infoUid”:{ 
                    “type”:”text”
                  },
                  “compareId”:{ 
                    “type”:”text”
                  },
                  “plats”:{ 
                    “type”:”keyword”
                  },
                  “keyWords”:{ 
                    “type”:”keyword”
                  },
                  “infoTitle”:{ 
                    “type”:”text”,
                    “store”:true,
                    “analyzer” : “ik_max_word”
                  },
                  “infoDetail”:{ 
                    “type”:”text”,
                    “store”:true,
                    “analyzer” : “ik_max_word”
                  },
                  “infoUrl”:{ 
                    “type”:”text”
                  },
                  “pubTime”:{ 
                    “type”:”date”,
                    “format”:”yyyy-MM-dd HH:mm:ss”
                  },
                  “platsType”:{ 
                    “type”:”keyword”
                  },
                  “mlEmotion”:{ 
                    “type”:”keyword”
                  },
                  “userEmotion”:{ 
                    “type”:”keyword”
                  }
              }
            }
        }
      }

      查詢的DSL

      GET act_yq_info_summary/_search
      {
          “query”: {
              “bool”: {
                  “must”: [{
                          “bool”: {
                              “should”: [{
                                      “match”: {
                                          “infoDetail”: “喬軍”
                                      }
                                  },
                                  {
                                      “match”: {
                                          “infoTitle”: “喬軍”
                                      }
                                  }
                              ]
                          }
                      },
                      {
                          “terms”: {
                              “userEmotion”: [“pos”, “neg”, “neu”]
                          }
                      }
                  ],
                  “filter”: {
                      “bool”: {
                          “must”: [{
                                  “terms”: {
                                      “plats”: [“jingdong”, “toutiao_news”, “toutiao_ans”, “sina_blog”, “sina_com”, “bd_news”, “bd_konws”, “bd_tieba”, “zhihu_ques”, “zhihu_ans”]
                                  }
                              },
                              {
                                  “range”: {
                                      “pubTime”: {
                                          “gte”: “2016-05-01 00:00:00”,
                                          “lte”: “2018-05-07 23:59:59”
                                      }
                                  }
                              },
                              {
                                  “terms”: {
                                      “keyWords”: [“藍(lán)月亮湖南衛(wèi)視中秋晚會(huì)”, “藍(lán)月亮央視中秋晚會(huì)”, “藍(lán)月亮旋風(fēng)孝子”]
                                  }
                              }
                          ]
                      }
                  }
              }
          },
          “highlight”: {
              “fields”: [{
                      “infoTitle”: {}
                  },
                  {
                      “infoDetail”: {}
                  }
              ]
          },
          “from”: 0,
          “size”: 10,
          “sort”: [{
                  “_score”: {
                      “order”: “desc”
                  }
              },
              {
                  “pubTime”: {
                      “order”: “desc”
                  }
              }
          ]
      }

      5、關(guān)于分詞器,這里還是推薦IK分詞吧,IK分詞可以設(shè)置 ik_smart  或者  ik_max_word,這里不做詳解,推薦使用ik_max_word

      寫在最后的話,ES是一個(gè)非常強(qiáng)大的搜索引擎,要入門不是很難,但是要精通查詢,查詢優(yōu)化,最大程度的搜索最想要的結(jié)果是有很多優(yōu)化的余地的,包括評(píng)分機(jī)制,包括新版本提供的聚合功能等,只能說,加油學(xué)習(xí)吧

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)