站長資訊網
        最全最豐富的資訊網站

        ElasticSearch[v6.2] 在實際項目中的應用

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

        本文的使用項目為基于Spring Boot 的快速開發環境搭建的項目框架,使用Spring Cloud作為服務治理的框架;集成ES的過程中,考慮過使用Spring Data的方式集成,進行數據的對接,后面通過多方面的調研和學習討論,最終確定了bboss的集成方案,一個 高性能elasticsearch ORM開發庫使用介紹,在這里特別感謝bboss的作者大河和他的團隊提供的幫助;

        一、ES基礎

        網上關于ES的介紹已經特別多,這里將不再進行詳細介紹,只是針對幾個重點進行說明;

          1、Index (索引)–可以理解為關系型數據庫中的 數據庫的概念

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

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

          3、Document(文檔)–可以理解為關系型數據庫中表的ROW

          一個文檔是一個可被索引的數據的基礎單元。例如,你可以給一個單獨的用戶創建一個文檔,給單個產品創建一個文檔,以及其他的單獨的規則。這個文檔用JSON格式表現,JSON是一種普遍的網絡數據交換格式。

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

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

           6、ELK是什么?

          ELK=elasticsearch+Logstash+kibana
          elasticsearch:后臺分布式存儲以及全文檢索
          logstash: 日志加工、“搬運工”
          kibana:數據可視化展示。 特別是在DSL的學習過程中,相當于數據庫的可視化工具,實時交互操作。
          ELK架構為數據分布式存儲、可視化查詢和日志解析創建了一個功能強大的管理鏈。 三者相互配合,取長補短,共同完成分布式大數據處理工作。

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

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

          而在本文的項目中,輿情監測部分,搜索功能將是該模塊的核心功能;包括條件檢索,中文分詞,全文搜索等功能,而BBOSS對于該部分功能的實現,提供了極大的便利;

          三、ES環境搭建和在項目中的應用

          1、ES集群搭建,關于ES集群的搭建,這里不再單獨介紹,推薦的博客特別多。但有一點要注意,就是不同版本的ES對于功能的支持會有一些區別,要注意;

          2、ES的查詢語法;項目集成BBOSS后,比較類似Mybatis框架,直接完成DSL語句的編寫放入XML,通過對應的DAO方法調用即可,所以ES的查詢語法是ES學習的重點,也是ES進階的重點,不同的需求對于DSL的查詢復雜度不一,可以通過ES的中文官方網站進行閱讀學習,并在自身搭建的ES集群提供的kibana中進行操作,ES權威中文指南

          3、項目集成bboss

          第一步、maven引入包

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

          第二步、bboss elasticsearch配置

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

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

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

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

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

        加載query dsl文件,并執行查詢操作

          @Override
          public String searchInfo(JSONObject jsonObject) {
                Map<String, Object> params = formatParams(jsonObject);
                JSONObject result = new JSONObject();
                //創建加載配置文件的客戶端工具,用來檢索文檔,單實例多線程安全
                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);
            }

        關于BBOSS語法的具體學習,可以移步到  高性能elasticsearch ORM開發庫使用介紹,或者入QQ群 166471282

          4、提供一個mapping設置和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”: [“藍月亮湖南衛視中秋晚會”, “藍月亮央視中秋晚會”, “藍月亮旋風孝子”]
                                    }
                                }
                            ]
                        }
                    }
                }
            },
            “highlight”: {
                “fields”: [{
                        “infoTitle”: {}
                    },
                    {
                        “infoDetail”: {}
                    }
                ]
            },
            “from”: 0,
            “size”: 10,
            “sort”: [{
                    “_score”: {
                        “order”: “desc”
                    }
                },
                {
                    “pubTime”: {
                        “order”: “desc”
                    }
                }
            ]
        }

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

        寫在最后的話,ES是一個非常強大的搜索引擎,要入門不是很難,但是要精通查詢,查詢優化,最大程度的搜索最想要的結果是有很多優化的余地的,包括評分機制,包括新版本提供的聚合功能等,只能說,加油學習吧

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 亚洲欧洲自拍拍偷精品 美利坚| 四虎成人精品| 久久人人超碰精品CAOPOREN| 国产成人精品视频一区二区不卡| 久久久久99精品成人片三人毛片| 亚洲国产精品自在线一区二区| 十八18禁国产精品www| 久久精品无码一区二区三区免费| 日本精品久久久久中文字幕| 国产日韩精品欧美一区| 亚洲精品国精品久久99热一| 久久精品这里只有精99品| 2023国产精品自拍| 国产亚洲一区二区精品| 久久精品国产亚洲av麻豆小说 | 国产精品天天看天天狠| 亚洲一日韩欧美中文字幕欧美日韩在线精品一区二 | 亚洲情侣偷拍精品| 久久久WWW免费人成精品| 国产乱子伦精品免费视频 | 色偷偷88888欧美精品久久久| 日韩精品中文字幕第2页| 九九热这里只有国产精品| 国产精品无码久久综合网| 91精品在线国产| 99久久精品免费| 97精品伊人久久久大香线蕉| 亚洲第一精品在线视频| 久久精品一区二区国产| 精品999久久久久久中文字幕| 91精品啪在线观看国产电影 | 精品成人一区二区三区四区| 国产精品极品| 99热热久久这里只有精品68| 一区二区三区精品国产欧美| 99精品电影一区二区免费看| AAA级久久久精品无码区| 国产精品美女网站| 狠狠色伊人久久精品综合网| 久久成人精品| 日韩精品欧美激情国产一区|