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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > vue >内容正文

vue

springboot elasticsearch vue ik中文分词器 实现百度/京东全文搜索

發布時間:2024/9/27 vue 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 springboot elasticsearch vue ik中文分词器 实现百度/京东全文搜索 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


背景:實現和百度搜索一樣效果的,全文搜索引擎支持關鍵詞高亮顯示

文章目錄

          • 1. 企業級搜索引擎解決方案
          • 2. 創建索引規則
          • 3. 數據拉取
          • 4. 搜索高亮
          • 5. 自定義詞庫
          • 6. 效果圖
          • 7. 開源源碼

1. 企業級搜索引擎解決方案

分詞器:english、standard、ik_max_smart、ik_smart、whitespace等

  • 索引:創建索引時用ik_max_smart進行分詞,搜索時使用ik_smart分詞器進行搜索
  • 查詢:精準匹配使用term;查詢匹配使用match
  • 類型:需要分詞使用text,部分詞精準用keyword,分數用double,經緯度用geo_point,數字用integer
  • 2. 創建索引規則
    PUT /jd_goods {"settings" : {"number_of_shards" : 1,"number_of_replicas" : 1},"mappings": {"properties": {"id":{"type": "integer"},"title":{"type": "text","analyzer": "ik_max_word","search_analyzer": "ik_smart"},"desc":{"type": "text","analyzer": "ik_max_word","search_analyzer": "ik_smart"},"price":{"type": "text"},"img":{"type": "text"}}} }
    3. 數據拉取

    http://localhost:9090/parse/vue

    public List<Content> parseJD(String keyword) throws IOException {String baseUrl = "https://search.xxx.com/Search?keyword=";// 解析網頁 在線預覽中有處理Document document = Jsoup.parse(new URL(baseUrl + keyword), 30000);// 所有js中可以使用的方法,這里都能用Element element = document.getElementById("J_goodsList");//獲取搜有的li元素Elements elements = element.getElementsByTag("li");ArrayList<Content> goodList = new ArrayList<>();// 獲取元素中的內容,這里el 就是每一個li標簽了for (Element el : elements) {//關于這種圖片特別多的網站,所有的圖片都是拉加載的String img = el.getElementsByTag("img").eq(0).attr("data-lazy-img");String price = el.getElementsByClass("p-price").eq(0).text();String title = el.getElementsByClass("p-name").eq(0).text();Content content = new Content();content.setTitle(title);content.setImg(img);content.setPrice("內容標題 " + price);content.setDesc("內容描述 " + title);goodList.add(content);}return goodList;}

    4. 搜索高亮
    // 2. 獲取es中的數據,實現基本搜索高亮功能public List<Map<String, Object>> searchPageHighlight(String keyword, int pageNo, int pageSize) throws IOException {if (pageNo <= 1) {pageNo = 1;}// 條件搜索SearchRequest searchRequest = new SearchRequest(ESConst.JD_SEARCH_INDEX);SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();// 分頁searchSourceBuilder.from(pageNo);searchSourceBuilder.size(pageSize);// 精準匹配TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery(ESConst.SEARCH_CONDITION_FIELD, keyword);searchSourceBuilder.query(termQueryBuilder);searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));//構建高亮HighlightBuilder highlightBuilder = new HighlightBuilder();highlightBuilder.field(ESConst.HIGHLIGHT_TITLE);highlightBuilder.field("desc");highlightBuilder.requireFieldMatch(true);//多個高亮 顯示highlightBuilder.preTags(ESConst.HIGHLIGHT_PRE_TAGS);highlightBuilder.postTags(ESConst.HIGHLIGHT_POST_TAGS);searchSourceBuilder.highlighter(highlightBuilder);// 執行搜索searchRequest.source(searchSourceBuilder);SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);// 解析結果ArrayList<Map<String, Object>> list = new ArrayList<>();for (SearchHit hit : searchResponse.getHits().getHits()) {// 解析高亮的字段,將原來的字段置換為我們高亮的字段即可!Map<String, HighlightField> highlightFields = hit.getHighlightFields();HighlightField title = highlightFields.get(ESConst.HIGHLIGHT_TITLE);HighlightField desc = highlightFields.get("desc");// 獲取原來的結果Map<String, Object> sourceAsMap = hit.getSourceAsMap();if (title != null) {Text[] fragments = title.fragments();String newTitle = "";for (Text text : fragments) {newTitle += text;}//高亮字段替換掉原來的內容即可sourceAsMap.put(ESConst.SEARCH_CONDITION_FIELD, newTitle);}if (desc != null) {Text[] fragments = desc.fragments();String newDesc = "";for (Text text : fragments) {newDesc += text;}//高亮字段替換掉原來的內容即可sourceAsMap.put("desc", newDesc);}// 將結果放入list容器返回list.add(sourceAsMap);}return list;}
    5. 自定義詞庫

    new_word.dic

    女包 女士包 java語言

    6. 效果圖

    http://localhost:9090/


    7. 開源源碼

    https://gitee.com/gblfy/es7-jd-vue

    總結

    以上是生活随笔為你收集整理的springboot elasticsearch vue ik中文分词器 实现百度/京东全文搜索的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。