SpringBoot Elasticsearch6.8.5

es目錄.png

Windwos Elasticsearch

Elasticsearch 基本介紹

全文搜索屬于最常見的需求,開源的 Elasticsearch (以下簡稱 Elastic)是目前全文搜索引擎的首選玫芦。

Elasticsearch是一個開源的分布式须揣、RESTful 風格的搜索和數(shù)據(jù)分析引擎,它的底層是開源庫Apache Lucene归形。
?Lucene 可以說是當下最先進糯景、高性能拴泌、全功能的搜索引擎庫——無論是開源還是私有贱案,但它也僅僅只是一個庫。為了充分發(fā)揮其功能止吐,你需要使用 Java 并將 Lucene 直接集成到應用程序中宝踪。 更糟糕的是,您可能需要獲得信息檢索學位才能了解其工作原理碍扔,因為Lucene 非常復雜瘩燥。

Elastic 的底層是開源庫 Lucene。但是不同,你沒法直接用 Lucene厉膀,必須自己寫代碼去調(diào)用它的接口。Elastic 是 Lucene 的封裝二拐,提供了 REST API 的操作接口服鹅,開箱即用。

為了解決Lucene使用時的繁復性百新,于是Elasticsearch便應運而生企软。它使用 Java 編寫,內(nèi)部采用 Lucene 做索引與搜索饭望,但是它的目標是使全文檢索變得更簡單仗哨,簡單來說,就是對Lucene 做了一層封裝铅辞,它提供了一套簡單一致的 RESTful API 來幫助我們實現(xiàn)存儲和檢索厌漂。
?當然,Elasticsearch 不僅僅是 Lucene斟珊,并且也不僅僅只是一個全文搜索引擎苇倡。 它可以被下面這樣準確地形容:

  • 一個分布式的實時文檔存儲,每個字段可以被索引與搜索
  • 一個分布式實時分析搜索引擎
  • 能勝任上百個服務節(jié)點的擴展囤踩,并支持 PB 級別的結(jié)構化或者非結(jié)構化數(shù)據(jù)
  • 可以快速地儲存雏节、搜索和分析海量數(shù)據(jù)

由于Elasticsearch的功能強大和使用簡單,維基百科高职、衛(wèi)報钩乍、Stack Overflow、GitHub等都紛紛采用它來做搜索≌浚現(xiàn)在寥粹,Elasticsearch已成為全文搜索領域的主流軟件之一变过。

Elastic 是java寫的,需要 Java 的jdk環(huán)境涝涤,根據(jù)下方【版本手冊】查看對應jdk版本媚狰。

推薦華為鏡像快速下載https://mirrors.huaweicloud.com/elasticsearch/

官方選擇下載https://www.elastic.co/cn/downloads/past-releases/#elasticsearch

所有版本手冊https://www.elastic.co/guide/en/elasticsearch/reference/index.html

客戶端https://www.elastic.co/guide/en/elasticsearch/client/index.html

Elasticsearch 6.8.5 單機安裝

環(huán)境要求:jdk1.8(最低)、Elasticsearch 6.8.5

系統(tǒng):Windwows

下載:elasticsearch-6.8.5.zip , 參考手冊-6.8

安裝:解壓阔拳,找到bin\elasticsearch.bat崭孤,雙擊運行

訪問:http://127.0.0.1:9200/

{
  "name" : "i1_C38J",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "_YG2A3LpSoOdh-wdLPOzlA",
  "version" : {
    "number" : "6.8.5",
    "build_flavor" : "default",
    "build_type" : "zip",
    "build_hash" : "78990e9",
    "build_date" : "2019-11-13T20:04:24.100411Z",
    "build_snapshot" : false,
    "lucene_version" : "7.7.2",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

以上顯示效果說明已經(jīng)安裝好Elasticsearch

kibana6.8.5 可視化工具

注意: kibana版本必須和Elasticsearch版本一致,否則會出現(xiàn)不可預料的錯誤糊肠。

安裝參考:https://www.elastic.co/guide/cn/kibana/current/windows.html

下載:kibana-6.8.5-windows-x86_64.zip) 解壓辨宠。

**zip目錄文件: **

.zip 整個包是獨立的。默認情況下货裹,所有的文件和目錄都在 $KIBANA_HOME?—?解壓包時創(chuàng)建的目錄下嗤形。這是非常方便的,因為您不需要創(chuàng)建任何目錄來使用 Kibana弧圆,卸載 Kibana 只需要簡單的刪除 $KIBANA_HOME 目錄赋兵。但還是建議修改一下配置文件和數(shù)據(jù)目錄,這樣就不會刪除重要數(shù)據(jù)搔预。

類型 描述 默認位置 設置
home Kibana home 目錄或 $KIBANA_HOME 霹期。 解壓包時創(chuàng)建的目錄
bin 二進制腳本,包括 kibana 啟動 Kibana 服務和 kibana-plugin 安裝插件拯田。 $KIBANA_HOME\bin
config 配置文件包括 kibana.yml 经伙。 $KIBANA_HOME\config
data Kibana 和其插件寫入磁盤的數(shù)據(jù)文件位置。 $KIBANA_HOME\data
optimize 編譯過的源碼勿锅。某些管理操作(如帕膜,插件安裝)導致運行時重新編譯源碼。 $KIBANA_HOME\optimize
plugins 插件文件位置溢十。每一個插件都一個單獨的二級目錄垮刹。 $KIBANA_HOME\plugins

配置系統(tǒng)環(huán)境變量:KIBANA_HOME=E:\Elasticsearch\kibana-6.8.5-windows-x86_64\bin

# 啟動 kibana
.\bin\kibana.bat
# 日志:輸出 log 到 STDOUT
# Ctrl-C 停止 Kibana

瀏覽器訪問:http://localhost:5601 安裝成功。

kibana 漢化:

從6.7版本開始张弛,Kibana支持中文荒典,無需再像之前那樣下載漢化包,甚至自己進行翻譯

打開config/kibana.yml吞鸭,找到最后一行寺董,去掉#,并將"en"改成"zh-CN"

#i18n.locale: "en"
i18n.locale: "zh-CN"

**重啟kibana **

Springboot Elasticsearch 6.8.5

一刻剥、選擇版本

Spring Data Elasticsearch

參考:https://docs.spring.io/spring-data/elasticsearch/docs/3.2.0.RC3/reference/html/#preface.versions

Spring Data Elasticsearch遮咖、Elasticsearch 對應版本

Spring Data Elasticsearch Elasticsearch
3.2.x 6.8.1
3.1.x 6.2.2
3.0.x 5.5.0
2.1.x 2.4.0
2.0.x 2.2.0
1.3.x 1.5.2

Spring Boot、Spring Data Elasticsearch造虏、Elasticsearch 對應版本

Spring Data Release Train Spring Data Elasticsearch Elasticsearch Spring Boot
Neumann[1] 4.0.x[1] 7.6.2 2.3.x[1]
Moore 3.2.x 6.8.6 2.2.x
Lovelace 3.1.x 6.2.2 2.1.x
Kay[2] 3.0.x[2] 5.5.0 2.0.x[2]
Ingalls[2] 2.1.x[2] 2.4.0 1.5.x[2]

dome參考:https://github.com/spring-projects/spring-data-examples/tree/master/elasticsearch

Java Elasticsearch 客戶端

官方推薦:https://www.elastic.co/guide/en/elasticsearch/client/index.html

二御吞、Spring Data Elasticsearch

Spring Data Elasticsearch 默認使用 High Level REST Client

版本:springboot 2.0.5麦箍、Elasticsearch6.8.5、springboot data elasticsearch3.2.5

pom.xml

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-elasticsearch</artifactId>
    <version>3.2.5.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.elasticsearch</groupId>
    <artifactId>elasticsearch</artifactId>
    <version>6.8.5</version>
</dependency>

*.yml

spring:
  data:
    elasticsearch:
      repositories:
        enabled: true # 啟用 ElasticsearchTemplate
      properties:
        path:
          logs: ./elasticsearch/log   # ES日志存儲目錄
          data: ./elasticsearch/data  # ES數(shù)據(jù)存儲目錄
      cluster-name: my-cluster        # ES集群名稱陶珠,在elasticsearch.yml中配置 默 elasticsearch
      cluster-nodes: 127.0.0.1:9300   # ES集群節(jié)點 用逗號分隔 , java連接默9300挟裂,http連接默9200

實體類

@Data
@Document(indexName = "book_index", type = "book_type", indexStoreType = "fs", shards = 5, replicas = 1, refreshInterval = "-1")
public class BookEntity {
    @Id
    private String id;
    private String title;
    private String content;
    private int userId;
    private int weight;
}

Repository接口

@Component
public interface BookRepository extends ElasticsearchRepository<BookEntity, String> {
}

controller層

package com.dist.controller;

import com.dist.dao.BookRepository;
import com.dist.entity.BookEntity;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.elasticsearch.index.query.MultiMatchQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.data.elasticsearch.core.query.IndexQuery;
import org.springframework.data.elasticsearch.core.query.IndexQueryBuilder;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.data.elasticsearch.core.query.SearchQuery;
import org.springframework.web.bind.annotation.*;

import static org.elasticsearch.index.query.QueryBuilders.*;

/**
 * @author*@*.com.cn
 * @data 2020/07/17 11:41
 */
@RestController
@Api(tags = {"BookElasticsearchController"}, description = "全文檢索")
public class BookElasticsearchController {

    @Autowired
    ElasticsearchTemplate elasticsearchTemplate;

    @Autowired
    BookRepository bookRepository;

    @ApiOperation(value = "添加索引", httpMethod = "POST")
    @PostMapping(value = "v1/book/add/{id}")
    public Object addbook(@ApiParam(defaultValue = "50") @PathVariable String id) {
        //創(chuàng)建索引
        // 1、直接用名稱創(chuàng)建索引
        //boolean indexRes = elasticsearchTemplate.createIndex("book_es");
        // 2揍诽、填入class對象創(chuàng)建索引
        //boolean indexRes = elasticsearchTemplate.createIndex(BookEntity.class);
        //System.out.println("======創(chuàng)建索引結(jié)果:" + indexRes + "=========");

        BookEntity bookEntity = new BookEntity();
        bookEntity.setId(id);
        bookEntity.setTitle("浣溪沙");
        bookEntity.setContent("宋·李清照 莫許杯深琥珀濃诀蓉,未成沉醉意先融。疏鐘已應晚來風暑脆。瑞腦香消魂夢斷");
        bookEntity.setUserId(51);
        bookEntity.setWeight(100);

        IndexQuery indexQuery = new IndexQueryBuilder()
                .withId(bookEntity.getId())
                .withObject(bookEntity)
                .build();
        String index = elasticsearchTemplate.index(indexQuery);
        //BookEntity document = bookRepository.save(bookEntity);
        return index;
    }

    @ApiOperation(value = "查詢?nèi)績?nèi)容", httpMethod = "GET")
    @GetMapping(value = "v1/book/srarch/all")
    public Object srarch() {
        return bookRepository.findAll();
    }

    @ApiOperation(value = "根據(jù)id查詢內(nèi)容", httpMethod = "GET")
    @GetMapping(value = "v1/book/srarch/id")
    public Object srarch(@ApiParam(defaultValue = "50") @RequestParam String id) {
        return bookRepository.findById(id);
    }

    @ApiOperation(value = "根據(jù)id更新內(nèi)容", httpMethod = "PUT")
    @PutMapping(value = "v1/book/srarch/updete")
    public Object updete(@ApiParam(defaultValue = "50") @RequestParam String id) {
        BookEntity bookEntity = new BookEntity();
        bookEntity.setId(id);
        bookEntity.setTitle("浣溪沙2");
        bookEntity.setContent("宋·李清照 莫許杯深琥珀濃渠啤,未成沉醉意先融。疏鐘已應晚來風饵筑。瑞腦香消魂夢斷");
        bookEntity.setUserId(55);
        bookEntity.setWeight(102);
        return bookRepository.save(bookEntity);
    }

    @ApiOperation(value = "單字符串全文模糊查詢Ex", httpMethod = "GET")
    @GetMapping(value = "v1/book/srarch/ex")
    public Object srarchEx(@ApiParam(value = "查詢內(nèi)容", defaultValue = "浣溪沙") @RequestParam String content,
                         @ApiParam(value = "當前頁", defaultValue = "0") @RequestParam int page,
                         @ApiParam(value = "顯示多少條", defaultValue = "20") @RequestParam int size) {

        SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(QueryBuilders.queryStringQuery(content)).withPageable(PageRequest.of(page, size)).build();
        return bookRepository.search(searchQuery);
    }

    @ApiOperation(value = "多字段的匹配查詢Ex", httpMethod = "GET")
    @GetMapping(value = "v1/book/srarch/queryBuilder")
    public Object srarchQueryBuilder(@ApiParam(value = "查詢內(nèi)容", defaultValue = "浣溪沙") @RequestParam String title) {

        MultiMatchQueryBuilder queryBuilder = multiMatchQuery(title, "title", "content");
        return bookRepository.search(queryBuilder);
    }

    @ApiOperation(value = "單字符串全文模糊查詢", notes = "查詢?nèi)孔侄蝺?nèi)容", httpMethod = "GET")
    @GetMapping(value = "v1/book/srarch")
    public Object srarch(@ApiParam(value = "查詢內(nèi)容", defaultValue = "浣溪沙") @RequestParam String content,
                         @ApiParam(value = "當前頁", defaultValue = "0") @RequestParam int page,
                         @ApiParam(value = "顯示多少條", defaultValue = "20") @RequestParam int size) {
        //使用queryStringQuery完成單字符串查詢
        //單字符串默認模糊查詢,默認排序处坪。將從所有字段中查找包含傳來的content分詞后字符串的數(shù)據(jù)集
        SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(QueryBuilders.queryStringQuery(content)).withPageable(PageRequest.of(page, size)).build();
        return elasticsearchTemplate.queryForList(searchQuery, BookEntity.class);
    }

    @ApiOperation(value = "某字段字符串模糊查詢", notes = "將從所有字段中查找包含傳來的content分詞后字符串的數(shù)據(jù)集", httpMethod = "GET")
    @GetMapping(value = "v1/book/srarch/matchQuery")
    public Object srarchMatchQuery(@ApiParam(value = "查詢內(nèi)容", defaultValue = "浣溪沙") @RequestParam String content,
                                   @ApiParam(value = "當前頁", defaultValue = "0") @RequestParam int page,
                                   @ApiParam(value = "顯示多少條", defaultValue = "20") @RequestParam int size) {
        //某字段(content)字符串模糊查詢
        SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchQuery("content", content)).withPageable(PageRequest.of(page, size)).build();
        return elasticsearchTemplate.queryForList(searchQuery, BookEntity.class);
    }

    @ApiOperation(value = "短語匹配", notes = "短語必須是連續(xù)的 不知歸路 不歸路", httpMethod = "GET")
    @GetMapping(value = "v1/book/srarch/PhraseQuery")
    public Object srarchPhraseQuery(@ApiParam("查詢內(nèi)容") @RequestParam String content,
                                    @ApiParam(value = "當前頁", defaultValue = "0") @RequestParam int page,
                                    @ApiParam(value = "顯示多少條", defaultValue = "20") @RequestParam int size) {

        // PhraseMatch查詢根资,短語匹配,單字段對某短語進行匹配查詢同窘,短語分詞的順序會影響結(jié)果
        //類似于數(shù)據(jù)庫里的 %落日熔金%
        SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(QueryBuilders.matchPhraseQuery("content", content)).withPageable(PageRequest.of(page, size)).build();
        return elasticsearchTemplate.queryForList(searchQuery, BookEntity.class);
    }

    @ApiOperation(value = "完全匹配查詢", notes = "最嚴格的匹配,不進行分詞", httpMethod = "GET")
    @GetMapping(value = "v1/book/srarch/TermQuery")
    public Object srarchTermQuery(@ApiParam(value = "id", defaultValue = "5") @RequestParam int userId,
                                  @ApiParam(value = "當前頁", defaultValue = "0") @RequestParam int page,
                                  @ApiParam(value = "顯示多少條", defaultValue = "10") @RequestParam int size) {
        //term一般適用于做過濾器filter的情況玄帕,譬如我們?nèi)ゲ樵僼itle中包含“浣溪沙”且userId=1時,那么就可以用termQuery(“userId”, 1)作為查詢的filter
        //不對傳來的值分詞想邦,去找完全匹配的
        SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(termQuery("userId", userId)).withPageable(PageRequest.of(page, size)).build();
        return elasticsearchTemplate.queryForList(searchQuery, BookEntity.class);
    }

    @ApiOperation(value = "多字段的匹配查詢", httpMethod = "GET")
    @GetMapping(value = "v1/book/srarch/MultiMatchQuery")
    public Object srarchMultiMatchQuery(@ApiParam("查詢內(nèi)容") @RequestParam String title,
                                        @ApiParam(value = "當前頁", defaultValue = "0") @RequestParam int page,
                                        @ApiParam(value = "顯示多少條", defaultValue = "10") @RequestParam int size) {

        //MultiMatchQuery: 多字段匹配 "title","content" ,只要任何一個字段包括該字符串即可
        SearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withQuery(QueryBuilders.multiMatchQuery(title, "title", "content"))
                .withPageable(PageRequest.of(page, size))
                .build();

        //MultiMatchQueryBuilder multiMatchQuery = QueryBuilders.multiMatchQuery(title, "title", "content");
        //構建查詢對象
        /*SearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withQuery(multiMatchQuery)
                .withIndices("book_es")  //索引名
                .withPageable(PageRequest.of(page, size, new Sort(Sort.Direction.DESC, "id")))
                .build();*/
        //執(zhí)行查詢
        return elasticsearchTemplate.queryForList(searchQuery, BookEntity.class);
    }

    @ApiOperation(value = "多字段合并查詢", httpMethod = "GET")
    @GetMapping(value = "v1/book/srarch/BoolQuery")
    public Object srarchBoolQuery(@ApiParam(value = "userId", defaultValue = "2") @RequestParam String userId,
                                  @ApiParam(value = "weight", defaultValue = "14") @RequestParam String weight,
                                  @ApiParam(value = "title", defaultValue = "浣溪沙") @RequestParam String title) {
        //boolQuery 可以設置多個條件的查詢方式,用來組合多個Query,組合方式有四種:must裤纹,mustnot,filter丧没,should
        /*must代表返回的文檔必須滿足must子句的條件鹰椒,會參與計算分值;
        filter代表返回的文檔必須滿足filter子句的條件呕童,但不會參與計算分值漆际;
        should代表返回的文檔可能滿足should子句的條件,也可能不滿足夺饲,有多個should時滿足任何一個就可以奸汇,通過minimum_should_match設置至少滿足幾個。
        mustnot代表必須不滿足子句的條件往声。*/
        SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(QueryBuilders.boolQuery().must(termQuery("userId", userId))
                .should(rangeQuery("weight").lt(weight)).must(matchQuery("title", title))).build();
        return elasticsearchTemplate.queryForList(searchQuery, BookEntity.class);
    }

    @ApiOperation(value = "刪除索引", httpMethod = "DELETE")
    @DeleteMapping(value = "v1/book/delete")
    public void deleteIndex(@ApiParam("id") @RequestParam String id) {

        //刪除索引
        BookEntity bookEntity = new BookEntity();
        bookEntity.setId(id);

        //bookRepository.delete(bookEntity);
        //根據(jù)id刪除
        bookRepository.deleteById(id);
        //刪除所有
        //bookRepository.deleteAll();
    }

    @ApiOperation(value = "刪除所有索引", httpMethod = "DELETE")
    @DeleteMapping(value = "v1/book/delete/all")
    public void deleteAllIndex() {
        //刪除所有
        bookRepository.deleteAll();
    }

}

InitBookData 初始化數(shù)據(jù)

/**
 * Email: *.com.cn
 * Desc:只初始化一次測試數(shù)據(jù)
 */
@Component
public class InitBookData {

    @Autowired
    BookRepository bookRepository;

    @PostConstruct
    public void init() {
        //只初始化一次
        Iterable<BookEntity> posts = bookRepository.findAll();
        if (posts.iterator().hasNext()) {
            return;
        }
        for (int i = 0; i < 40; i++) {
            BookEntity book = new BookEntity();
            book.setTitle(getTitle().get(i));
            book.setContent(getContent().get(i));
            book.setWeight(i);
            book.setUserId(i % 10);
            bookRepository.save(book);
        }
    }

    private List<String> getTitle() {
        List<String> list = new ArrayList<>();
        list.add("《如夢令·常記溪亭日暮》");
        list.add("《醉花陰·薄霧濃云愁永晝》");
        list.add("《聲聲慢·尋尋覓覓》");
        list.add("《永遇樂·落日熔金》");
        list.add("《如夢令·昨夜雨疏風驟》");
        list.add("《漁家傲·雪里已知春信至》");
        list.add("《點絳唇·蹴[1]罷秋千》");
        list.add("《點絳唇·寂寞深閨》");
        list.add("《蝶戀花·淚濕羅衣脂粉滿》");
        list.add("《蝶戀花 離情》");
        list.add("《浣溪沙》");
        list.add("《浣溪沙》");
        list.add("《浣溪沙》");
        list.add("《浣溪沙》");
        list.add("《浣溪沙》");
        list.add("《減字木蘭花·賣花擔上》");
        list.add("《臨江仙·歐陽公作《蝶戀花》");
        list.add("《臨江仙·庭院深深深幾許》");
        list.add("《念奴嬌·蕭條庭院》");
        list.add("《菩薩蠻·風柔日薄春猶早》");
        list.add("《菩薩蠻·歸鴻聲斷殘云碧》");
        list.add("《武陵春·風住塵香花已盡》");
        list.add("《一剪梅·紅藕香殘玉蕈秋》");
        list.add("《漁家傲·天接云濤連曉霧》");
        list.add("《鷓鴣天·暗淡輕黃體性柔》");
        list.add("《鷓鴣天·寒日蕭蕭上鎖窗》");
        list.add("《一剪梅·紅藕香殘玉簟秋》");
        list.add("《如夢令·常記溪亭日暮》");
        list.add("《浣溪沙》");
        list.add("《浣溪沙》");
        list.add("《浣溪沙》");
        list.add("《蝶戀花·淚濕羅衣脂粉滿》");
        list.add("《蝶戀花·暖日晴風初破凍》");
        list.add("《鷓鴣天·寒日蕭蕭上鎖窗》");
        list.add("《醉花陰·薄霧濃云愁永晝》");
        list.add("《鷓鴣天·暗淡輕黃體性柔》");
        list.add("《蝶戀花·永夜懨懨歡意少》");
        list.add("《浣溪沙》");
        list.add("《浣溪沙》");
        list.add("《如夢令·誰伴明窗獨坐》");
        return list;
    }

    private List<String> getContent() {
        List<String> list = new ArrayList<>();
        list.add("初中 宋·李清照 常記溪亭日暮擂找,沉醉不知歸路,興盡晚回舟浩销,誤入藕花深處贯涎。爭渡,爭渡");
        list.add("重陽節(jié) 宋·李清照 薄霧濃云愁永晝慢洋,瑞腦消金獸柬采。佳節(jié)又重陽欢唾,玉枕紗廚,半夜涼初透粉捻。東");
        list.add("閨怨詩 宋·李清照 尋尋覓覓礁遣,冷冷清清,凄凄慘慘戚戚肩刃。乍暖還寒時候祟霍,最難將息。三杯兩");
        list.add("元宵節(jié) 宋·李清照 落日熔金盈包,暮云合璧沸呐,人在何處。染柳煙濃呢燥,吹梅笛怨崭添,春意知幾許。元");
        list.add("婉約詩 宋·李清照 昨夜雨疏風驟叛氨,濃睡不消殘酒呼渣,試問卷簾人,卻道海棠依舊寞埠。知否屁置,知否");
        list.add("描寫梅花 宋·李清照 雪里已知春信至,寒梅點綴瓊枝膩仁连,香臉半開嬌旖旎蓝角,當庭際,玉人浴出");
        list.add(" 宋·李清照 蹴罷秋千饭冬,起來慵整纖纖手使鹅。露濃花瘦,薄汗輕衣透昌抠。見客入來并徘,襪刬金");
        list.add("閨怨詩 宋·李清照 寂寞深閨,柔腸一寸愁千縷扰魂。惜春春去麦乞。幾點催花雨。倚遍闌干劝评,只是無");
        list.add("婉約詩 宋·李清照 淚濕羅衣脂粉滿姐直。四疊陽關,唱到千千遍蒋畜。人道山長水又斷声畏。蕭蕭微雨聞");
        list.add("描寫春天 宋·李清照 暖雨晴風初破凍,柳眼梅腮,已覺春心動插龄。酒意詩情誰與共愿棋?淚融殘粉花");
        list.add("寒食節(jié) 宋·李清照 淡蕩春光寒食天,玉爐沈水裊殘煙均牢,夢回山枕隱花鈿糠雨。海燕未來人斗草,");
        list.add(" 宋·李清照 髻子傷春慵更梳徘跪,晚風庭院落梅初甘邀,淡云來往月疏疏,玉鴨薰爐閑瑞腦垮庐,");
        list.add(" 宋·李清照 莫許杯深琥珀濃松邪,未成沉醉意先融。疏鐘已應晚來風哨查。瑞腦香消魂夢斷逗抑,");
        list.add("閨怨詩 宋·李清照 小院閑窗春已深,重簾未卷影沉沉寒亥。倚樓無語理瑤琴邮府,遠岫出山催薄暮。");
        list.add("愛情詩 宋·李清照 繡幕芙蓉一笑開护盈,斜偎寶鴨親香腮挟纱,眼波才動被人猜羞酗。一面風情深有韻腐宋,");
        list.add("描寫春天 宋·李清照 賣花擔上,買得一枝春欲放檀轨。淚染輕勻胸竞,猶帶彤霞曉露痕。怕郎猜道参萄,奴");
        list.add("》 宋·李清照 歐陽公作《蝶戀花》卫枝,有“深深深幾許”之句,予酷愛之讹挎。用其語作“庭");
        list.add("描寫梅花 宋·李清照 庭院深深深幾許校赤,云窗霧閣春遲,為誰憔悴損芳姿筒溃。夜來清夢好马篮,應是發(fā)");
        list.add("寒食節(jié) 宋·李清照 蕭條庭院,又斜風細雨怜奖,重門須閉浑测。寵柳嬌花寒食近,種種惱人天氣歪玲。險");
        list.add("思鄉(xiāng)詩 宋·李清照 風柔日薄春猶早迁央,夾衫乍著心情好掷匠。睡起覺微寒,梅花鬢上殘岖圈。故鄉(xiāng)何處");
        list.add("描寫春天 宋·李清照 歸鴻聲斷殘云碧讹语,背窗雪落爐煙直。燭底鳳釵明幅狮,釵頭人勝輕募强。角聲催曉");
        list.add("閨怨詩 宋·李清照 風住塵香花已盡,日晚倦梳頭崇摄。物是人非事事休擎值,欲語淚先流。聞說雙溪");
        list.add(" 宋·李清照 紅藕香殘玉蕈秋逐抑,輕解羅裳鸠儿,獨上蘭舟。云中誰寄錦書來厕氨?雁字回時进每,月");
        list.add("豪放詩 宋·李清照 天接云濤連曉霧。星河欲轉(zhuǎn)千帆舞命斧。仿佛夢魂歸帝所田晚。聞天語。殷勤問我");
        list.add("描寫花 宋·李清照 暗淡輕黃體性柔国葬。情疏跡遠只香留贤徒。何須淺碧深紅色,自是花中第一流汇四。");
        list.add("描寫秋天 宋·李清照 寒日蕭蕭上瑣窗接奈,梧桐應恨夜來霜。酒闌更喜團茶苦通孽,夢斷偏宜瑞腦香序宦。");
        list.add("閨怨詩 宋·李清照 紅藕香殘玉簟秋。輕解羅裳背苦,獨上蘭舟互捌。云中誰寄錦書來?雁字回時行剂,月");
        list.add(" 宋·李清照 常記溪亭日暮秕噪。沈醉不知歸路。興盡晚回舟硼讽,誤入藕花深處巢价。爭渡。爭渡");
        list.add(" 宋·李清照 莫許杯深琥珀濃。未成沈醉意先融壤躲。已應晚來風城菊。瑞腦香消魂夢斷,");
        list.add(" 宋·李清照 小院閑窗春色深碉克。重簾未卷影沈沈凌唬。倚樓無語理瑤琴。遠岫出山催薄暮漏麦,");
        list.add(" 宋·李清照 淡蕩春光寒食天客税。玉爐沈水裊殘煙。夢回山枕隱花鈿撕贞。海燕未來人斗草更耻,");
        list.add(" 宋·李清照 淚濕羅衣脂粉滿。四疊陽關捏膨,唱到千千遍秧均。人道山長山又斷。蕭蕭微雨聞");
        list.add(" 宋·李清照 暖日晴風初破凍号涯。柳眼眉腮目胡,已覺春心動。酒意詩情誰與共链快。淚融殘粉花");
        list.add(" 宋·李清照 寒日蕭蕭上鎖窗誉己。梧桐應恨夜來霜。酒闌更喜團茶苦域蜗,夢斷偏宜瑞腦香巨双。");
        list.add(" 宋·李清照 薄霧濃云愁永晝。瑞腦消金獸地消。佳節(jié)又重陽炉峰,玉枕紗廚畏妖,半夜涼初透脉执。東");
        list.add(" 宋·李清照 暗淡輕黃體性柔。情疏跡遠只香留戒劫。何須淺碧深紅色半夷,自是花中第一流。");
        list.add(" 宋·李清照 永夜懨懨歡意少迅细∥组希空夢長安,認取長安道茵典。為報今年春色好湘换。花光月影宜");
        list.add(" 宋·李清照 髻子傷春慵更梳。晚風庭院落梅初彩倚。淡云來往月疏疏筹我。玉鴨熏爐閑瑞腦,");
        list.add(" 宋·李清照 繡面芙蓉一笑開帆离。斜飛寶鴨襯香腮蔬蕊。眼波才動被人猜。一面風情深有韻哥谷,");
        list.add(" 宋·李清照 誰伴明窗獨坐岸夯,我共影兒倆個。燈盡欲眠時们妥,影也把人拋躲猜扮。無那,無那");
        return list;
    }

}
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末监婶,一起剝皮案震驚了整個濱河市破镰,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌压储,老刑警劉巖鲜漩,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異集惋,居然都是意外死亡孕似,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門刮刑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來喉祭,“玉大人,你說我怎么就攤上這事雷绢》豪樱” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵翘紊,是天一觀的道長蔽氨。 經(jīng)常有香客問我,道長帆疟,這世上最難降的妖魔是什么鹉究? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮踪宠,結(jié)果婚禮上自赔,老公的妹妹穿的比我還像新娘。我一直安慰自己柳琢,他們只是感情好绍妨,可當我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布润脸。 她就那樣靜靜地躺著,像睡著了一般他去。 火紅的嫁衣襯著肌膚如雪津函。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天孤页,我揣著相機與錄音尔苦,去河邊找鬼。 笑死行施,一個胖子當著我的面吹牛允坚,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蛾号,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼稠项,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了鲜结?” 一聲冷哼從身側(cè)響起展运,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎精刷,沒想到半個月后拗胜,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡怒允,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年埂软,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片纫事。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡勘畔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出丽惶,到底是詐尸還是另有隱情炫七,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布钾唬,位于F島的核電站万哪,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏知纷。R本人自食惡果不足惜壤圃,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一陵霉、第九天 我趴在偏房一處隱蔽的房頂上張望琅轧。 院中可真熱鬧,春花似錦踊挠、人聲如沸乍桂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽睹酌。三九已至权谁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間憋沿,已是汗流浹背旺芽。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留辐啄,地道東北人采章。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像壶辜,于是被迫代替她去往敵國和親悯舟。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,925評論 2 344