国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

基于 ElasticSearch 實現(xiàn)站內(nèi)全文搜索,寫得太好了

這篇具有很好參考價值的文章主要介紹了基于 ElasticSearch 實現(xiàn)站內(nèi)全文搜索,寫得太好了。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

  • 搜索引擎服務(wù)使用ElasticSearch

  • 提供的對外web服務(wù)選則springboot web

1.1 ElasticSearch

Elasticsearch是一個基于Lucene的搜索服務(wù)器。它提供了一個分布式多用戶能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java語言開發(fā)的,并作為Apache許可條款下的開放源碼發(fā)布,是一種流行的企業(yè)級搜索引擎。Elasticsearch用于云計算中,能夠達到實時搜索,穩(wěn)定,可靠,快速,安裝使用方便。

官方客戶端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和許多其他語言中都是可用的。根據(jù)DB-Engines的排名顯示,Elasticsearch是最受歡迎的企業(yè)搜索引擎,其次是Apache Solr,也是基于Lucene。1

現(xiàn)在開源的搜索引擎在市面上最常見的就是ElasticSearch和Solr,二者都是基于Lucene的實現(xiàn),其中ElasticSearch相對更加重量級,在分布式環(huán)境表現(xiàn)也更好,二者的選則需考慮具體的業(yè)務(wù)場景和數(shù)據(jù)量級。對于數(shù)據(jù)量不大的情況下,完全需要使用像Lucene這樣的搜索引擎服務(wù),通過關(guān)系型數(shù)據(jù)庫檢索即可。

1.2 springBoot

Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can “just run”.2

現(xiàn)在springBoot在做web開發(fā)上是絕對的主流,其不僅僅是開發(fā)上的優(yōu)勢,在布署,運維各個方面都有著非常不錯的表現(xiàn),并且spring生態(tài)圈的影響力太大了,可以找到各種成熟的解決方案。

1.3 ik分詞器

elasticSearch本身不支持中文的分詞,需要安裝中文分詞插件,如果需要做中文的信息檢索,中文分詞是基礎(chǔ),此處選則了ik,下載好后放入elasticSearch的安裝位置的plugin目錄即可。

2 環(huán)境準(zhǔn)備


需要安裝好elastiSearch以及kibana(可選),并且需要lk分詞插件。

  • 安裝elasticSearch elasticsearch官網(wǎng). 筆者使用的是7.5.1。

  • ik插件下載 ik插件github地址. 注意下載和你下載elasticsearch版本一樣的ik插件。

  • 將ik插件放入elasticsearch安裝目錄下的plugins包下,新建報名ik,將下載好的插件解壓到該目錄下即可,啟動es的時候會自動加載該插件。

es實現(xiàn)站內(nèi)搜索,程序員,elasticsearch,大數(shù)據(jù),搜索引擎

  • 搭建springboot項目 idea ->new project ->spring initializer

es實現(xiàn)站內(nèi)搜索,程序員,elasticsearch,大數(shù)據(jù),搜索引擎

3 項目架構(gòu)


  • 獲取數(shù)據(jù)使用ik分詞插件

  • 將數(shù)據(jù)存儲在es引擎中

  • 通過es檢索方式對存儲的數(shù)據(jù)進行檢索

  • 使用es的java客戶端提供外部服務(wù)

es實現(xiàn)站內(nèi)搜索,程序員,elasticsearch,大數(shù)據(jù),搜索引擎

4 實現(xiàn)效果


4.1 搜索頁面

簡單實現(xiàn)一個類似百度的搜索框即可。

es實現(xiàn)站內(nèi)搜索,程序員,elasticsearch,大數(shù)據(jù),搜索引擎

4.2 搜索結(jié)果頁面

es實現(xiàn)站內(nèi)搜索,程序員,elasticsearch,大數(shù)據(jù),搜索引擎

點擊第一個搜索結(jié)果是我個人的某一篇博文,為了避免數(shù)據(jù)版權(quán)問題,筆者在es引擎中存放的全是個人的博客數(shù)據(jù)。

es實現(xiàn)站內(nèi)搜索,程序員,elasticsearch,大數(shù)據(jù),搜索引擎

5 具體代碼實現(xiàn)


5.1 全文檢索的實現(xiàn)對象

按照博文的基本信息定義了如下實體類,主要需要知道每一個博文的url,通過檢索出來的文章具體查看要跳轉(zhuǎn)到該url。

package com.lbh.es.entity;

import com.fasterxml.jackson.annotation.JsonIgnore;

import javax.persistence.*;

/**

  • PUT articles

  • {

  • “mappings”:

  • {“properties”:{

  • “author”:{“type”:“text”},

  • “content”:{“type”:“text”,“analyzer”:“ik_max_word”,“search_analyzer”:“ik_smart”},

  • “title”:{“type”:“text”,“analyzer”:“ik_max_word”,“search_analyzer”:“ik_smart”},

  • “createDate”:{“type”:“date”,“format”:“yyyy-MM-dd HH:mm:ss||yyyy-MM-dd”},

  • “url”:{“type”:“text”}

  • } },

  • “settings”:{

  • "index":{
    
  •   "number_of_shards":1,
    
  •   "number_of_replicas":2
    
  • }
    
  • }

  • }


  • Copyright?lbhbinhao@163.com

  • @author liubinhao

  • @date 2021/3/3

*/

@Entity

@Table(name = “es_article”)

public class ArticleEntity {

@Id

@JsonIgnore

@GeneratedValue(strategy = GenerationType.IDENTITY)

private long id;

@Column(name = “author”)

private String author;

@Column(name = “content”,columnDefinition=“TEXT”)

private String content;

@Column(name = “title”)

private String title;

@Column(name = “createDate”)

private String createDate;

@Column(name = “url”)

private String url;

public String getAuthor() {

return author;

}

public void setAuthor(String author) {

this.author = author;

}

public String getContent() {

return content;

}

public void setContent(String content) {

this.content = content;

}

public String getTitle() {

return title;

}

public void setTitle(String title) {

this.title = title;

}

public String getCreateDate() {

return createDate;

}

public void setCreateDate(String createDate) {

this.createDate = createDate;

}

public String getUrl() {

return url;

}

public void setUrl(String url) {

this.url = url;

}

}

復(fù)制代碼

5.2 客戶端配置

通過java配置es的客戶端。

package com.lbh.es.config;

import org.apache.http.HttpHost;

import org.elasticsearch.client.RestClient;

import org.elasticsearch.client.RestClientBuilder;

import org.elasticsearch.client.RestHighLevelClient;

import org.springframework.beans.factory.annotation.Value;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import java.util.ArrayList;

import java.util.List;

/**

  • Copyright?lbhbinhao@163.com

  • @author liubinhao

  • @date 2021/3/3

*/

@Configuration

public class EsConfig {

@Value(“${elasticsearch.schema}”)

private String schema;

@Value(“${elasticsearch.address}”)

private String address;

@Value(“${elasticsearch.connectTimeout}”)

private int connectTimeout;

@Value(“${elasticsearch.socketTimeout}”)

private int socketTimeout;

@Value(“${elasticsearch.connectionRequestTimeout}”)

private int tryConnTimeout;

@Value(“${elasticsearch.maxConnectNum}”)

private int maxConnNum;

@Value(“${elasticsearch.maxConnectPerRoute}”)

private int maxConnectPerRoute;

@Bean

public RestHighLevelClient restHighLevelClient() {

// 拆分地址

List hostLists = new ArrayList<>();

String[] hostList = address.split(“,”);

for (String addr : hostList) {

String host = addr.split(“:”)[0];

String port = addr.split(“:”)[1];

hostLists.add(new HttpHost(host, Integer.parseInt(port), schema));

}

// 轉(zhuǎn)換成 HttpHost 數(shù)組

HttpHost[] httpHost = hostLists.toArray(new HttpHost[]{});

// 構(gòu)建連接對象

RestClientBuilder builder = RestClient.builder(httpHost);

// 異步連接延時配置

builder.setRequestConfigCallback(requestConfigBuilder -> {

requestConfigBuilder.setConnectTimeout(connectTimeout);

requestConfigBuilder.setSocketTimeout(socketTimeout);

requestConfigBuilder.setConnectionRequestTimeout(tryConnTimeout);

return requestConfigBuilder;

});

// 異步連接數(shù)配置

builder.setHttpClientConfigCallback(httpClientBuilder -> {

httpClientBuilder.setMaxConnTotal(maxConnNum);

httpClientBuilder.setMaxConnPerRoute(maxConnectPerRoute);

return httpClientBuilder;

});

return new RestHighLevelClient(builder);

}

}

復(fù)制代碼

5.3 業(yè)務(wù)代碼編寫

包括一些檢索文章的信息,可以從文章標(biāo)題,文章內(nèi)容以及作者信息這些維度來查看相關(guān)信息。

package com.lbh.es.service;

import com.google.gson.Gson;

import com.lbh.es.entity.ArticleEntity;

import com.lbh.es.repository.ArticleRepository;

import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;

import org.elasticsearch.action.get.GetRequest;

import org.elasticsearch.action.get.GetResponse;

import org.elasticsearch.action.index.IndexRequest;

import org.elasticsearch.action.index.IndexResponse;

import org.elasticsearch.action.search.SearchRequest;

import org.elasticsearch.action.search.SearchResponse;

import org.elasticsearch.action.support.master.AcknowledgedResponse;

import org.elasticsearch.client.RequestOptions;

import org.elasticsearch.client.RestHighLevelClient;

import org.elasticsearch.client.indices.CreateIndexRequest;

import org.elasticsearch.client.indices.CreateIndexResponse;

import org.elasticsearch.common.settings.Settings;

import org.elasticsearch.common.xcontent.XContentType;

import org.elasticsearch.index.query.QueryBuilders;

import org.elasticsearch.search.SearchHit;

import org.elasticsearch.search.builder.SearchSourceBuilder;

import org.springframework.stereotype.Service;

import javax.annotation.Resource;

import java.io.IOException;

import java.util.*;

/**

  • Copyright?lbhbinhao@163.com

  • @author liubinhao

  • @date 2021/3/3

*/

@Service

public class ArticleService {

private static final String ARTICLE_INDEX = “article”;

@Resource

private RestHighLevelClient client;

@Resource

private ArticleRepository articleRepository;

public boolean createIndexOfArticle(){

Settings settings = Settings.builder()

.put(“index.number_of_shards”, 1)

.put(“index.number_of_replicas”, 1)

.build();

// {“properties”:{“author”:{“type”:“text”},

// “content”:{“type”:“text”,“analyzer”:“ik_max_word”,“search_analyzer”:“ik_smart”}
自我介紹一下,小編13年上海交大畢業(yè),曾經(jīng)在小公司待過,也去過華為、OPPO等大廠,18年進入阿里一直到現(xiàn)在。

深知大多數(shù)Java工程師,想要提升技能,往往是自己摸索成長或者是報班學(xué)習(xí),但對于培訓(xùn)機構(gòu)動則幾千的學(xué)費,著實壓力不小。自己不成體系的自學(xué)效果低效又漫長,而且極易碰到天花板技術(shù)停滯不前!

因此收集整理了一份《2024年Java開發(fā)全套學(xué)習(xí)資料》,初衷也很簡單,就是希望能夠幫助到想自學(xué)提升又不知道該從何學(xué)起的朋友,同時減輕大家的負(fù)擔(dān)。es實現(xiàn)站內(nèi)搜索,程序員,elasticsearch,大數(shù)據(jù),搜索引擎

es實現(xiàn)站內(nèi)搜索,程序員,elasticsearch,大數(shù)據(jù),搜索引擎

es實現(xiàn)站內(nèi)搜索,程序員,elasticsearch,大數(shù)據(jù),搜索引擎

既有適合小白學(xué)習(xí)的零基礎(chǔ)資料,也有適合3年以上經(jīng)驗的小伙伴深入學(xué)習(xí)提升的進階課程,基本涵蓋了95%以上Java開發(fā)知識點,真正體系化!

由于文件比較大,這里只是將部分目錄截圖出來,每個節(jié)點里面都包含大廠面經(jīng)、學(xué)習(xí)筆記、源碼講義、實戰(zhàn)項目、講解視頻,并且會持續(xù)更新!

如果你覺得這些內(nèi)容對你有幫助,可以掃碼獲取?。。▊渥ava獲取)

es實現(xiàn)站內(nèi)搜索,程序員,elasticsearch,大數(shù)據(jù),搜索引擎

言盡于此,完結(jié)

無論是一個初級的 coder,高級的程序員,還是頂級的系統(tǒng)架構(gòu)師,應(yīng)該都有深刻的領(lǐng)會到設(shè)計模式的重要性。

  • 第一,設(shè)計模式能讓專業(yè)人之間交流方便,如下:

程序員A:這里我用了XXX設(shè)計模式

程序員B:那我大致了解你程序的設(shè)計思路了

  • 第二,易維護

項目經(jīng)理:今天客戶有這樣一個需求…

程序員:明白了,這里我使用了XXX設(shè)計模式,所以改起來很快

  • 第三,設(shè)計模式是編程經(jīng)驗的總結(jié)

程序員A:B,你怎么想到要這樣去構(gòu)建你的代碼

程序員B:在我學(xué)習(xí)了XXX設(shè)計模式之后,好像自然而然就感覺這樣寫能避免一些問題

  • 第四,學(xué)習(xí)設(shè)計模式并不是必須的

程序員A:B,你這段代碼使用的是XXX設(shè)計模式對嗎?

程序員B:不好意思,我沒有學(xué)習(xí)過設(shè)計模式,但是我的經(jīng)驗告訴我是這樣寫的

es實現(xiàn)站內(nèi)搜索,程序員,elasticsearch,大數(shù)據(jù),搜索引擎

從設(shè)計思想解讀開源框架,一步一步到Spring、Spring5、SpringMVC、MyBatis等源碼解讀,我都已收集整理全套,篇幅有限,這塊只是詳細(xì)的解說了23種設(shè)計模式,整理的文件如下圖一覽無余!

es實現(xiàn)站內(nèi)搜索,程序員,elasticsearch,大數(shù)據(jù),搜索引擎

搜集費時費力,能看到此處的都是真愛!
《一線大廠Java面試題解析+核心總結(jié)學(xué)習(xí)筆記+最新講解視頻+實戰(zhàn)項目源碼》,點擊傳送門即可獲??!
第一,設(shè)計模式能讓專業(yè)人之間交流方便,如下:

程序員A:這里我用了XXX設(shè)計模式

程序員B:那我大致了解你程序的設(shè)計思路了

  • 第二,易維護

項目經(jīng)理:今天客戶有這樣一個需求…

程序員:明白了,這里我使用了XXX設(shè)計模式,所以改起來很快

  • 第三,設(shè)計模式是編程經(jīng)驗的總結(jié)

程序員A:B,你怎么想到要這樣去構(gòu)建你的代碼

程序員B:在我學(xué)習(xí)了XXX設(shè)計模式之后,好像自然而然就感覺這樣寫能避免一些問題

  • 第四,學(xué)習(xí)設(shè)計模式并不是必須的

程序員A:B,你這段代碼使用的是XXX設(shè)計模式對嗎?

程序員B:不好意思,我沒有學(xué)習(xí)過設(shè)計模式,但是我的經(jīng)驗告訴我是這樣寫的

[外鏈圖片轉(zhuǎn)存中…(img-nrz3GOnM-1711933868009)]

從設(shè)計思想解讀開源框架,一步一步到Spring、Spring5、SpringMVC、MyBatis等源碼解讀,我都已收集整理全套,篇幅有限,這塊只是詳細(xì)的解說了23種設(shè)計模式,整理的文件如下圖一覽無余!

[外鏈圖片轉(zhuǎn)存中…(img-Sah5EZMT-1711933868010)]

搜集費時費力,能看到此處的都是真愛!
《一線大廠Java面試題解析+核心總結(jié)學(xué)習(xí)筆記+最新講解視頻+實戰(zhàn)項目源碼》點擊傳送門即可獲?。?/strong>文章來源地址http://www.zghlxwxcb.cn/news/detail-859293.html

到了這里,關(guān)于基于 ElasticSearch 實現(xiàn)站內(nèi)全文搜索,寫得太好了的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Es elasticsearch 二十 站內(nèi)搜索示例 高亮內(nèi)容 java springboot 實現(xiàn)

    目錄 實現(xiàn)思路 代碼 全依賴 參數(shù)對象 搜索實現(xiàn)代碼全代碼 日志 重點 權(quán)重 分頁 入?yún)⒏吡翑?shù)據(jù)處理 返回出參數(shù)據(jù)處理 構(gòu)建請求 請求體設(shè)置搜索字段 返回數(shù)據(jù)解析獲取高亮 高亮通過設(shè)置標(biāo)簽和class? 前端設(shè)置class字體顏色 也可直接寫在后端 ? 全依賴 參數(shù)對象 搜索實現(xiàn)代碼

    2024年02月02日
    瀏覽(29)
  • Spring Boot 項目設(shè)計業(yè)務(wù)操作日志功能,寫得太好了!

    Spring Boot 項目設(shè)計業(yè)務(wù)操作日志功能,寫得太好了!

    很久以前都想寫這篇文章,一直沒有空,但直到現(xiàn)在我對當(dāng)時的情景還有印象,之所以有印象是因為需求很簡單,業(yè)務(wù)操作日志的記錄與查詢的功能,但是具體實現(xiàn)真的很爛,具體的爛法會在反面示例里細(xì)說,領(lǐng)導(dǎo)以及客戶層面很認(rèn)可,一系列迷之操作,讓我印象深刻。 客戶

    2024年02月11日
    瀏覽(15)
  • 京東一面:分布式 ID 生成方案怎么選?寫得太好了!

    京東一面:分布式 ID 生成方案怎么選?寫得太好了!

    在分布式系統(tǒng)中,經(jīng)常需要用到全局唯一ID發(fā)生器,標(biāo)識需要存儲的數(shù)據(jù)。我們需要什么樣的ID生成器? ID生成器除了是數(shù)據(jù)的唯一標(biāo)識以外,一般需要在系統(tǒng)中承擔(dān)更多的責(zé)任,概括起來有以下幾點: 唯一性:“全局唯一” vs “業(yè)務(wù)唯一”? 分布式系統(tǒng)使用唯一的ID生成器

    2024年02月08日
    瀏覽(19)
  • Elasticsearch實現(xiàn)全文搜索的步驟和實現(xiàn)原理

    Elasticsearch實現(xiàn)全文搜索的步驟和實現(xiàn)原理

    ElasticSearch(簡稱為ES)是一個基于開源的分布式搜索和分析引擎,它提供了強大的全文搜索、結(jié)構(gòu)化查詢、實時數(shù)據(jù)分析和可視化等功能。它是建立在 Apache Lucene 搜索引擎庫之上的,并且通過 RESTful API 提供了簡單易用的接口。 以下是 ElasticSearch 的一些主要特點: 分布式架構(gòu)

    2024年02月06日
    瀏覽(27)
  • SpringBoot封裝Elasticsearch搜索引擎實現(xiàn)全文檢索

    注:本文實現(xiàn)了Java對Elasticseach的分頁檢索/不分頁檢索的封裝 ES就不用過多介紹了,直接上代碼: 創(chuàng)建Store類(與ES字段對應(yīng),用于接收ES數(shù)據(jù)) Elasticsearch全文檢索接口:不分頁檢索 Elasticsearch全文檢索接口:分頁檢索 本文實現(xiàn)了Java對Elasticsearch搜索引擎全文檢索的封裝 傳入

    2024年02月04日
    瀏覽(38)
  • fastapi結(jié)合Manticore Search、elasticsearch、mysql實現(xiàn)全文搜索

    fastapi結(jié)合Manticore Search、elasticsearch、mysql實現(xiàn)全文搜索

    創(chuàng)建測試表 測試表插入數(shù)據(jù) 表字段描述 字段意義 mysql數(shù)據(jù)同步到es es查看數(shù)據(jù)(Elasticvue插件) ? mysql數(shù)據(jù)同步到Manticore 注:Manticore 和 Mysql 使用pymysql即mysql客戶端 Manticore 數(shù)據(jù)查詢(工具Webyog SQLyog) ? es安全認(rèn)證連接(參考官網(wǎng)) 按fields查詢方法封裝,輸入?yún)?shù)fields 篩選器,

    2024年02月12日
    瀏覽(20)
  • 基于Java的新聞全文搜索引擎的設(shè)計與實現(xiàn)

    基于Java的新聞全文搜索引擎的設(shè)計與實現(xiàn)

    中文摘要 本文以學(xué)術(shù)研究為目的,針對新聞行業(yè)迫切需求和全文搜索引擎技術(shù)的優(yōu)越性,設(shè)計并實現(xiàn)了一個針對新聞領(lǐng)域的全文搜索引擎。該搜索引擎通過Scrapy網(wǎng)絡(luò)爬蟲工具獲取新聞頁面,將新聞內(nèi)容存儲在分布式存儲系統(tǒng)HBase中,并利用倒排索引及輪排索引等索引技術(shù)對新

    2024年02月14日
    瀏覽(23)
  • Elasticsearch(十四)搜索---搜索匹配功能⑤--全文搜索

    Elasticsearch(十四)搜索---搜索匹配功能⑤--全文搜索

    不同于之前的term。terms等結(jié)構(gòu)化查詢,全文搜索首先對查詢詞進行分析,然后根據(jù)查詢詞的分詞結(jié)果構(gòu)建查詢。這里所說的全文指的是文本類型數(shù)據(jù)(text類型),默認(rèn)的數(shù)據(jù)形式是人類的自然語言,如對話內(nèi)容、圖書名稱、商品介紹和酒店名稱等。結(jié)構(gòu)化搜索關(guān)注的是數(shù)據(jù)是

    2024年02月11日
    瀏覽(21)
  • Elasticsearch【全文搜索】

    全文搜索是ES的關(guān)鍵特性之一,平時我們使用SQL的like語句,搜索一些文本、字符串是否包含指定的,但是如果兩篇文章,都包含我們的,具體那篇文章內(nèi)容的相關(guān)度更高? 這個SQL的like語句是做不到的,更別說like語句的性能問題了。 ES通過分詞處理、相關(guān)度計算

    2024年02月09日
    瀏覽(20)
  • SpringBoot Elasticsearch全文搜索

    SpringBoot Elasticsearch全文搜索

    全文搜索(檢索),工作原理:計算機索引程序,掃描文章中的每一個詞,對每一個詞建立一個索引,指明出現(xiàn)次數(shù)和位置。查詢時通過索引進行查找,類似于查字典。 因為是通過索引在查,速度較于通過sql查,會快很多。 具體過程如下: 1、建文本庫 2、建立索引 3、執(zhí)行

    2024年02月03日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包