整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          純JS打造select多選下拉框+模糊查詢功能

          選下拉框功能,html本身就提供,multiple就可以了。但是這個multiple有個缺點,那就是高度和寬度是固定的,無法改變,很占用頁面空間。

          下面兩張圖,第一張的是純js完成的,第二張的是html原生的multiple。

          第一張:缺點是麻煩,優點是節約頁面空間,且附帶模糊查詢功能。

          第二張:缺點是浪費空間,優點是簡單。

          當然,現在很多前端框架都包含了左圖的功能,簡單易用。之所以會用純js完成左圖的功能,是因為同事負責的一個項目,框架很老,而且大公司對系統框架控制比較嚴格,不能引用新的前端框架,所以才用純js寫的。

          代碼不多,很簡單,必要的注釋都有,相信都能看得懂。有什么疑問的話可以留言哈,一起討論。

          下面附上模糊查詢的功能示意圖:

          014年公司認繳制之后,有些公司的注冊資本金很高,交易對手是什么狀況就顯得有些模糊了。交易對手是否是大公司?交易對手是否實力雄厚?交易對手是否是異常公司?這些問題可能很難琢磨,而交易對手一旦選擇失敗,企業可能面臨經濟損失、資金周轉困難、長年累月的訴訟和連環違約責任等窘境。因此建議交易之前查詢一下如下幾個免費網站,簡單了解交易對手的基本情況。

          1、信用中國 https://www.creditchina.gov.cn/home/index.html 查詢交易對手是否有相關資質證書或許可。交易對手無相關資質或許可,可能會影響合同的效力,同時發包方面臨選聘失責并承擔部分責任的風險。

          2、國家企業信用信息公示系統 http://www.gsxt.gov.cn/index.html 了解該公司的股權狀況(質押、抵押)、行政許可、行政處罰以及是否被列入異常經營名錄、是否具有交易涉及的知識產權、交易涉及產品是否被處罰、相關處罰記錄等。相關年報也可以查看,部分企業會公開實際經營地址、企業繳納社保情況等。

          3、裁判文書網 https://wenshu.court.gov.cn/ 了解公司是否有合同履約而產生的訴訟,如頻繁因產品、合同履行等發生訴訟,則要考慮其是否能夠履行合同以及合作的訴訟風險。

          4、中國執行信息公開網 http://zxgk.court.gov.cn/ 查詢公司是否是被執行人、是否為失信被執行人以及限制高消費。

          5、企查查、啟信寶、天眼查等第三方查詢網站(部分功能可能收費)查看交易對手的關聯企業信息以及公司近期是否有開庭公告、是否涉及的訴訟等。

          當然,隨著市場交易的復雜性以及專業化的發展,企業分工越來越細,部分企業非因主觀原因被訴也成為了常事,因此查看相關文書時需要注意查看法院查明部分,區分企業主觀違約還是不得以卷入紛爭。

          注我的微信公眾號:后端技術漫談

          不定期推送關于后端開發、爬蟲、算法題、數據結構方面的原創技術文章,以及生活中的逸聞趣事。

          我目前是一名后端開發工程師。主要關注后端開發,數據安全,網絡爬蟲,物聯網,邊緣計算等方向。

          原創博客主要內容

          • Java知識點復習全手冊
          • Leetcode算法題解析
          • 劍指offer算法題解析
          • SpringCloud菜鳥入門實戰系列
          • SpringBoot菜鳥入門實戰系列
          • Python爬蟲相關技術文章
          • 后端開發相關技術文章

          在這里插入圖片描述

          前言

          本文介紹了如何整合搜索引擎elasticsearch與springboot,對外提供數據查詢接口。

          業務介紹

          我的個人網站需要對mysql數據庫內存儲的京東商品進行模糊查詢(模仿淘寶商品搜索),所以選擇了將數據導入elasticsearch隨后使用他來進行關鍵詞查詢。前端只需發送用戶搜索的關鍵詞和分頁參數(可選),即可返回商品數據(json格式)

          開發環境

          組件介紹:

          • elasticsearch:搜索引擎,用于存儲待搜索數據
          • logstash:用于將mysql中的商品數據同步到搜索引擎中
          • elasticsearch-head(可選):elasticsearch可視化工具
          • kibana(可選):elasticsearch可視化工具

          本文測試環境:

          • springboot:1.5.16
          • elasticsearch:2.3.5(springboot1.5僅支持2.x的es)
          • logstash:6.5.4

          開發步驟

          使用Docker部署elasticsearch

          • docker下一鍵啟動es,可根據需要的版本號對語句做修改
          sudo docker run -it --rm --name elasticsearch -d -p 9200:9200 -p 9300:9300 elasticsearch:2.3.5
          

          注意到該命令:

          • --rm參數:容器終止后銷毀
          • -d:后臺進程
          • -p 9200:9200 -p 9300:9300:開放了9200端口和9300端口

          得到如圖:

          在這里插入圖片描述

          此時打開網頁localhost:9200即可查看狀態,顯示類似為:

          {
           "name" : "Ant-Man",
           "cluster_name" : "elasticsearch",
           "version" : {
           "number" : "2.3.5",
           "build_hash" : "90f439ff60a3c0f497f91663701e64ccd01edbb4",
           "build_timestamp" : "2016-07-27T10:36:52Z",
           "build_snapshot" : false,
           "lucene_version" : "5.5.0"
           },
           "tagline" : "You Know, for Search"
          }
          

          注意:docker的es默認對0.0.0.0公網開放

          下載并使用logstash并導入數據

          本文中要導入的是pm_backend下的表pm_jd_item內的全部京東商品數據

          詳細步驟參考:

          http://blog.codecp.org/2018/04/16/Elasticsearch%E4%B9%8B%E4%BD%BF%E7%94%A8Logstash%E5%AF%BC%E5%85%A5Mysql%E6%95%B0%E6%8D%AE/

          最終編寫的jdbc.conf為:

          schedule => "* * * * *"默認為每分鐘同步一次

          input {
           jdbc {
           jdbc_connection_string => "jdbc:mysql://localhost:3306/pm_backend"
           jdbc_user => "root"
           jdbc_password => "xxxxxxxxxx"
           jdbc_driver_library => "xxxxxxxx/mysql-connector-java-5.1.6.jar"
           jdbc_driver_class => "com.mysql.jdbc.Driver"
           jdbc_paging_enabled => "true"
           jdbc_page_size => "5000"
           statement=> "select * from pm_jd_item"
           schedule => "* * * * *"
           type => "pm_jd_item"
           }
          }
          
          output {
           elasticsearch {
           hosts => "localhost:9200"
           index => "pm_backend"
           document_type => "%{type}"
           document_id => "%{id}"
           }
           stdout {
           codec => json_lines
           }
          }
          

          在logstash目錄下執行命令,完成數據的導入:

          bin/logstash -f jdbc.conf
          

          得到如圖:

          在這里插入圖片描述

          同步完成后,使用elasticsearch-head查看(或者用kibana,請隨意):

          在這里插入圖片描述

          整合進springboot

          1. 添加pom.xml
          <!-- 搜索引擎:elastic-search-->
          <dependency>
           <groupId>org.elasticsearch</groupId>
           <artifactId>elasticsearch</artifactId>
           <version>2.4.6</version>
          </dependency>
          <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
          </dependency>
          <dependency>
           <groupId>org.springframework.data</groupId>
           <artifactId>spring-data-elasticsearch</artifactId>
          </dependency>
          
          1. 修改application.properties
          # elasticsearch
          spring.data.elasticsearch.cluster-name=elasticsearch
          #節點地址,多個節點用逗號隔開
          spring.data.elasticsearch.cluster-nodes=127.0.0.1:9300
          #spring.data.elasticsearch.local=false
          spring.data.elasticsearch.repositories.enable=true
          
          1. 在需要進行搜索的實體類上添加@Document、@Id、@Field等標注,本例為JdItem.java
          @Document(indexName = "pm_backend", type = "pm_jd_item")
          public class JdItem implements Serializable {
          
           @Id
           private Integer id;
          
           @Field(type = FieldType.Long)
           private Long itemId;
          
           @Field(type = FieldType.Long)
           private Long categoryId;
          
           @Field(type = FieldType.String)
           private String name;
          
          1. 添加JdItemRepository繼承ElasticsearchRepository
          public interface JdItemRepository extends ElasticsearchRepository<JdItem, Integer>{
          }
          
          1. 編寫JdItemController中的查詢接口findJdItemByName

          代碼截取自個人項目京東價格監控,僅供參考!

           /**
           * 根據商品名在pm_jd_item中搜索商品
           * @param itemName
           * @param startRow
           * @param pageSize
           * @return
           */
           @ApiOperation(value="查詢商品", notes="查詢商品")
           @RequestMapping(value = "/findJdItemByName", method = {RequestMethod.GET})
           public ResponseData<List<JdItem>> findJdItemByName(
           @ApiParam("用戶輸入的商品名") @RequestParam(value = "itemName") String itemName,
           @ApiParam("頁碼索引(默認為0)") @RequestParam(value = "startRow", required = false, defaultValue = "0") int startRow,
           @ApiParam("每頁的商品數量(默認為10)") @RequestParam(value = "pageSize", required = false, defaultValue = "10") int pageSize
           ){
           ResponseData<List<JdItem>> responseData = new ResponseData<>();
           try {
          
           FunctionScoreQueryBuilder functionScoreQueryBuilder = QueryBuilders.functionScoreQuery().add(QueryBuilders.matchPhraseQuery("name", itemName), ScoreFunctionBuilders.weightFactorFunction(100)).scoreMode("sum").setMinScore(10);
           Pageable pageable = new PageRequest(startRow, pageSize);
           SearchQuery searchQuery = new NativeSearchQueryBuilder().withPageable(pageable).withQuery(functionScoreQueryBuilder).build();
           Page<JdItem> jdItems = jdItemRepository.search(searchQuery);
           // Page分頁getTotalPages()返回了應有的頁數,臨時放在errorMsg傳給前端
           responseData.jsonFill(1, String.valueOf(jdItems.getTotalPages()), jdItems.getContent());
           } catch (Exception e) {
           e.printStackTrace();
           responseData.jsonFill(2, e.getMessage(), null);
           }
           return responseData;
           }
          }
          
          1. 運行springboot

          調用findJdItemByName接口,得到:

          在這里插入圖片描述

          整合分詞器功能

          請參考:https://github.com/medcl/elasticsearch-analysis-ik

          參考

          Docker安裝ES & Kibana:

          https://www.jianshu.com/p/fdfead5acc23

          Elasticsearch之使用Logstash導入Mysql數據:

          http://blog.codecp.org/2018/04/16/Elasticsearch%E4%B9%8B%E4%BD%BF%E7%94%A8Logstash%E5%AF%BC%E5%85%A5Mysql%E6%95%B0%E6%8D%AE/

          關注我

          我是蠻三刀把刀,后端開發。主要關注后端開發,數據安全,爬蟲等方向。

          來微信和我聊聊:yangzd1102

          Github個人主頁:

          https://github.com/qqxx6661

          原創博客主要內容

          • Java知識點復習全手冊
          • Leetcode算法題解析
          • 劍指offer算法題解析
          • Python爬蟲相關技術實戰
          • 后端開發相關技術實戰
          • SpringCloud實戰

          同步更新公眾號及以下全部博客:

          1. Csdn

          http://blog.csdn.net/qqxx6661

          2. 知乎

          https://www.zhihu.com/people/yang-zhen-dong-1/

          3. 掘金

          https://juejin.im/user/5b48015ce51d45191462ba55

          4. 簡書

          https://www.jianshu.com/u/b5f225ca2376

          個人公眾號:后端技術漫談

          如果文章對你有幫助,不妨收藏起來并轉發給您的朋友們~


          主站蜘蛛池模板: 波多野结衣AV一区二区三区中文 | 日韩高清一区二区三区不卡| 国产av福利一区二区三巨| 中文字幕一区二区人妻| 久久久不卡国产精品一区二区| 国产视频一区二区在线观看| 精品人妻少妇一区二区| 日本一区二区三区不卡在线视频| 一区二区三区视频免费| 麻豆国产一区二区在线观看| 国产人妖视频一区在线观看| 美女AV一区二区三区| 一区二区三区精品| 国产伦精品一区二区三区无广告| 日本免费一区二区三区最新| 国产亚洲福利一区二区免费看 | 亚洲一区二区三区无码影院| 国产精品视频一区二区三区经| 久久国产精品亚洲一区二区| 亚拍精品一区二区三区| 无码国产精品久久一区免费| AV怡红院一区二区三区| 亚洲国产一区在线观看| 精品一区二区三区3d动漫| 国产伦精品一区二区三区四区| 成人区精品一区二区不卡| 久久99精品波多结衣一区| 国产嫖妓一区二区三区无码| 久久久久人妻精品一区二区三区| 高清一区二区三区| 亚洲A∨精品一区二区三区| 久久精品免费一区二区喷潮| 色婷婷AV一区二区三区浪潮| 亚洲欧美国产国产综合一区| 精品国产AⅤ一区二区三区4区| 精品一区二区三区在线播放| 国模私拍福利一区二区| 日韩精品无码一区二区三区不卡| 丰满岳妇乱一区二区三区| 久久精品无码一区二区三区免费| 日本精品视频一区二区三区|