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
- Transport Client 不推薦
- Java High Level REST Client 推薦
- Reactive REST Client 不推薦
二御吞、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;
}
}