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

【springboot-04】ElasticSearch8.7搜索

這篇具有很好參考價值的文章主要介紹了【springboot-04】ElasticSearch8.7搜索。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

為什么學?因為它查詢速度很快,而且是非關(guān)系型數(shù)據(jù)庫?(NoSql)

一些增刪改查已經(jīng)配置好了,無需重復敲碼

ElasticSearch 更新快,本篇文章將主要介紹一些常用方法。

對于 spirngboot 整合 Es 的文章很少,有些已經(jīng)過時【更新太快了】

?依賴:Maven

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

配置類:EsConfig

@Configuration
public class EsConfig {

    // 創(chuàng)建低級客戶端
    public RestClient restClient() {
        return RestClient.builder(
                // 創(chuàng)建一個客戶端 地址本機 9200 端口
                new HttpHost("localhost",9200)
        ).build();
    }

    // 使用Jackson映射器創(chuàng)建傳輸層
    public ElasticsearchTransport elasticsearchTransport() {
        return new RestClientTransport(
                // 將客戶端放在這里
                restClient(),
                // json 解析器 【spring boot提供】
                new JacksonJsonpMapper());
    }

    // 創(chuàng)建API客戶端
    @Bean
    public ElasticsearchClient elasticsearchClient() {
        return new ElasticsearchClient(elasticsearchTransport());
    }
}

水果信息

@Document(indexName = "fruit")
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class Fruit implements Serializable {
    private Long id;
    @Field(type = FieldType.Text)
    private String name;
    @Field(type = FieldType.Keyword)
    private String category;
    @Field(type = FieldType.Double)
    private Double price;
    @Field(index = false, type = FieldType.Keyword)
    private String images;
    private String body;
}

操作數(shù)據(jù)庫:繼承類

// 繼承 Ela... 可以簡單實現(xiàn)增刪改查
// 存儲位置: Elasticsearch 安裝目錄下有個data 文件夾
// 集群操作: 可以多復制幾個 ES 服務器【集群名字不能相同,端口不能相同】
@Repository
public interface FruitRepository extends ElasticsearchRepository<Fruit,Long>{
    Fruit findById(long id);
    Fruit findByName(String name);
    // 通過分類查詢所有水果
    // category 水果分類
    List<Fruit> findAllByCategory(String category);
}

配置已完成!


1. 增刪改查

調(diào)用 save 方法,該方法已經(jīng)在?CrudRepository 實現(xiàn)

long id = System.currentTimeMillis();
Fruit fruit = new Fruit(id,"紅蛇果","蘋果",7.29,"https://s1.ax1x.com/2023/02/13/pSIqh2q.png","蛇果");
fruitMapper.save(fruit);
System.out.println(fruit.getId());

【springboot-04】ElasticSearch8.7搜索

控制器 Controller 里面如何添加?fruitServices 寫在 service 層,這個 Controller 層只做請求和響應,具體業(yè)務邏輯與上面添加代碼一樣(即 save 方法)。

@PostMapping("/add")
    public ResponseBody<String> addFruit(Fruit fruit) {
        // 調(diào)用 service 層方法
        HttpStatus status = fruitService.save(fruit);
        // 針對操作成功與否,返回不同的響應
        if (status == HttpStatus.OK) {
            // 操作成功
            return ResponseBody.success();
        }
        return ResponseBody.failure(status);
}

普通的增刪改查,其實與數(shù)據(jù)庫操作并無區(qū)別【步驟都差不多】

  1. 創(chuàng)建一個接口類 【繼承 ElasticsearchRepository】 (MySql 可能會用到 @Mapper 注解或者映射文件,這里采取 Mybatis 來管理 MySql)
  2. 可以直接寫 Controller 層【如果可以,也可以寫在 Service 層】
  3. 運行、瀏覽器請求接口【完畢!】

2. 搜索?——用 ES 方式查詢數(shù)據(jù)庫

對于實際例子,我們可以看這篇2019年的文章【SpringBoot 整合 ElasticSearch】

對于查詢來說,相比于普通增刪改查,多了一個 @Query 注解,對于老版本的一些方法已經(jīng)廢棄了,如 NativeSearchQueryBuilder?已被棄用

@Query 注解?elasticsearch 常見幾種查詢方式

  1. 精準查詢 term【完全匹配,不分詞】
    1. 單值查詢
    2. 多值查詢
  2. 匹配查詢 match 【分詞,類似模糊匹配】
    1. ?match
    2. ?match_all
    3. multi_match
    4. match_phrase 【分詞,保留全部搜索詞項,位置相同】
  3. bool 查詢【類似于 mysql where語句】
    1. must 【and 匹配】
    2. must_not 【不算貢獻分】
    3. should 【or 匹配】
    4. filter 【過濾,不算貢獻分】
  4. filter 查詢 【緩存,常和range范圍搭配使用】
    1. gt 大于
    2. lt 小于
    3. gte 大于等于
    4. lte 小于等于

?當沒有采用 @Query 時,默認精準查詢

如查詢 http://localhost:8123/fruit/紅富士蘋果?

List<Fruit> findAllByName(String name);

【springboot-04】ElasticSearch8.7搜索

?如果在接口方法上加上 @Query,同樣查詢紅富士蘋果

? 調(diào)用接口與上面類似,只是作為區(qū)分,方法名以 Match 結(jié)尾【可自定義方法名】

??????同樣如果不用重新創(chuàng)建一個方法,直接在接口方法添加 @Query 就行

@Query("{\"match\":{\"name\":\"?0\"}}")
List<Fruit> findAllByNameMatch(String name);

【springboot-04】ElasticSearch8.7搜索

??總結(jié):自定義查詢的方式有2種文章來源地址http://www.zghlxwxcb.cn/news/detail-465237.html

  1. 自定義1個接口,并對其進行實現(xiàn) 【官方基本夠使用,因此很少自己創(chuàng)建】
  2. 使用 @Query 來修飾接口方法 【個人感覺用的較多】

3. 爬蟲?這只是方便獲取大量網(wǎng)上信息

    @Autowired
    private BlobRepository blobRepository;

    @Test
    public void testE1() throws InterruptedException {
        for (int i = 0;i < 31;i++) {
            String content = "";

            // 創(chuàng)建httpclient實例
            try(CloseableHttpClient httpclient = HttpClients.createDefault()) {
                // 創(chuàng)建http get實例
                HttpGet httpget = new HttpGet("https://www.quge9.cc/book/666/" + i + ".html");
                // 執(zhí)行g(shù)et請求
                CloseableHttpResponse response = httpclient.execute(httpget);
                // 返回實體
                HttpEntity entity = response.getEntity();
                // 轉(zhuǎn)碼: UTF-8
                content = EntityUtils.toString(entity, "utf-8");
                // 關(guān)閉流和釋放系統(tǒng)資源
                response.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

            // 解析網(wǎng)頁
            Document document = Jsoup.parse(content);
            // 選出文章段落
            Elements articleP = document.selectXpath("http://*[@id=\"chaptercontent\"]");
            // 處理文章段落,將每一段拆開,添加上<p></p>
            String[] text = articleP.text().split(" ");
            List<String> pList = new ArrayList<>(Arrays.asList(text));
            StringBuilder resultP = new StringBuilder();
            for (String p : pList) {
                // 過濾掉無關(guān)信息
                if (!p.contains("請收藏本站") && !p.contains("點此報錯")) {
                    p = p.replaceAll((char)12288 + "","");
                    p = "<p>" + p + "</p>";
                    resultP.append(p);
                }
            }

            // 解析標題
            Elements articleT = document.select("#read > div.book.reader > div.content > h1");

            // 獲取結(jié)果,保存數(shù)據(jù)庫
            Blob blob = new Blob(System.currentTimeMillis(),articleT.text(),"史上最強練氣期",new Date(),resultP.toString());
            blobRepository.save(blob);
            System.out.println("正在爬取第" + i + "章內(nèi)容...,每隔3秒爬取下一章內(nèi)容!");
            Thread.sleep(3*1000);
        }
    }

到了這里,關(guān)于【springboot-04】ElasticSearch8.7搜索的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領支付寶紅包贊助服務器費用

相關(guān)文章

  • java(springboot)對接elasticsearch8+

    注:jackson包es只用到了databind,之所以全部引用是因為actuator用到了其他,只升級一個會 導致版本沖突 注:因為沒有用springboot自身的es插件所以健康檢查檢測不到es狀態(tài),關(guān)閉es檢測 上邊創(chuàng)建索引是定制的加了特殊mapping,正常這樣

    2024年02月16日
    瀏覽(26)
  • springboot整合elasticsearch8組合條件查詢

    整合過程見上一篇文章 springboot整合elasticsearch8 1.es8多條件組合查詢 2.使用scroll進行大數(shù)據(jù)量查詢

    2024年02月16日
    瀏覽(19)
  • springBoot整合ElasticSearch8.x版本

    導入依賴 ? dependency ? ? ? ? groupIdcom.fasterxml.jackson.core/groupId ? ? ? ? artifactIdjackson-databind/artifactId ? ? ? ? version2.13.2/version ? /dependency ? ? dependency ? ? ? ? groupIdorg.glassfish/groupId ? ? ? ? artifactIdjakarta.json/artifactId ? ? ? ? version2.0.1/version ? /dependency ? ? ? ? ? dependency ?

    2023年04月21日
    瀏覽(25)
  • Springboot3.1+Elasticsearch8.x匹配查詢

    Springboot3.1+Elasticsearch8.x匹配查詢

    springboot-starter3.1.0中spring-data-elasticsearch的版本為5.1.0,之前很多方法和類都找不到了。這里主要講講在5.1.0版本下如何使用spring data對elesticsearch8.x進行匹配查詢。 第一步當然是配置依賴 在這里面,spring-boot-starter-data-elasticsearch是3.1.0的,里面的spring-data-elasticsearch是5.1.0的,服務

    2024年02月15日
    瀏覽(22)
  • java-springboot整合ElasticSearch8.2復雜查詢

    近期有大數(shù)據(jù)項目需要用到es,而又是比較新的es版本,網(wǎng)上也很少有8.x的java整合教程,所有寫下來供各位參考。 首先 1.導包: 2.客戶端連接代碼EsUtilConfigClint: 一開始按照其他博主的方法,長時間連接不操作查詢再次調(diào)用查詢時會報錯timeout,所以要設置RequestConfigCallback 3

    2024年02月11日
    瀏覽(16)
  • SpringBoot + ElasticSearch8.4.3 實現(xiàn)簡單CRUD、批量操作
  • SpringBoot3.0 整合 ElasticSearch8.5.0 及使用

    這兩個版本都是目前較新的版本,本文選用的依賴是 spring-boot-starter-data-elasticsearch:3.0 ,這個新版本也是改用了es的 elasticsearch-java API,全面推薦使用Lambda語法;另外SpringData本身推出了 Repository 功能(有些類似Mybatis-Plus)的功能,也支持注解簡化開發(fā)。 Docker 快速部署 單機 ela

    2024年02月11日
    瀏覽(21)
  • SpringBoot3整合Elasticsearch8.x之全面保姆級教程

    SpringBoot3整合Elasticsearch8.x之全面保姆級教程

    安裝配置 ES : https://blog.csdn.net/qq_50864152/article/details/136724528 安裝配置 Kibana : https://blog.csdn.net/qq_50864152/article/details/136727707 新建項目:新建名為 web 的 SpringBoot3 項目 公共配置 介紹:一個開源的高擴展的分布式全文檢索引擎,可以近乎實時的存儲 和檢索數(shù)據(jù) 依賴: web 模塊

    2024年04月13日
    瀏覽(27)
  • elasticsearch8和kibana部署以及與springboot整合遇到的坑

    elasticsearch8和kibana部署以及與springboot整合遇到的坑

    我本來使用的是最新版本的es 8.6.2。但是由于ik分詞器只更新到8.6.1,所以就更改為部署8.6.1。在過程中遇到一些問題,這里做一個總結(jié) 環(huán)境:windows10 elasticsearch版本:8.6.1 一、修改es 用戶密碼的方式 二、kibana 使用用戶名和密碼登錄 修改kibana.yml 文件 啟動kibana一直閃退 解決方

    2024年02月02日
    瀏覽(22)
  • Elasticsearch8.8.0 SpringBoot實戰(zhàn)操作各種案例(索引操作、聚合、復雜查詢、嵌套等)

    Elasticsearch8.8.0 全網(wǎng)最新版教程 從入門到精通 通俗易懂 引入依賴 添加配置文件 application.yaml 導入ca證書到項目中 從任意一個es容器中,拷貝證書到resources目錄下 [外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-EXytUrDp-1691330960034)(media/16912196423122/16

    2024年02月13日
    瀏覽(28)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包