寫在前面
通過之前的系列文章,整個ES搜索文件的流程與大的問題已經(jīng)統(tǒng)統(tǒng)掃除了,既然是全棧流程,是不能缺少前端查詢頁面的,前端需簡單實現(xiàn)一個用戶輸入查詢關(guān)鍵詞句,發(fā)起搜索,頁面以表格形式展示查詢的結(jié)果,額外可以提供文件的預(yù)覽或下載操作。
系列可閱讀:
1. 實現(xiàn)ES檢索pdf等文件內(nèi)容的插件
2. 基于GitBucket的Hook構(gòu)建ES檢索PDF等文檔全棧方案
3. Java實現(xiàn)讀取轉(zhuǎn)碼寫入ES
4. ES文件搜索的細節(jié)優(yōu)化與實現(xiàn)
5. ES解析word內(nèi)容為空的問題和直接使用Tika解析文檔的方案
實現(xiàn)前端demo
前端框架使用vue快速創(chuàng)建,并基于axois進行后端接口的交互,前提是后端的ES數(shù)據(jù)查詢接口要提前創(chuàng)建好并啟動。
具體的操作步驟,從安裝vue客戶端開始到啟動服務(wù),如下:
npm install -g @vue/cli
ln -s /opt/local/npm/node-v16.19.1-linux-x64/bin/vue /usr/bin/vue
vue -V
# 創(chuàng)建模板項目~HelloWorld
vue create lauf
cd lauf && ll
# 安裝依賴
npm install
npm install axios -g
# 啟動服務(wù)
npm run serve
項目結(jié)構(gòu)如上!我們主要修改vim HelloWorld.vue
,如果需要調(diào)用后端服務(wù)請求數(shù)據(jù),需在依賴中添加axios庫并安裝,否則會編譯失敗。
npm查詢依賴有哪些版本:
npm view axios versions
頁面效果
頁面可輸入關(guān)鍵詞點擊查詢,下方以表格形式返回搜索到的結(jié)果,包含標(biāo)題等信息,以及預(yù)覽和下載等操作。
ES索引結(jié)構(gòu)與查詢語句
#這個是索引的最終mapping結(jié)構(gòu),設(shè)置了多個分片
PUT /docwrite2
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 2
},
"mappings": {
"properties": {
"id": {
"type": "keyword"
},
"title": {
"type": "text",
"analyzer": "ik_max_word"
},
"fileType": {
"type": "keyword"
},
"active": {
"type": "boolean"
},
"upTime": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss"
},
"content": {
"type": "text",
"analyzer": "ik_smart"
}
}
}
}
# 這個是一個輸入關(guān)鍵詞進行查詢的DSL語句
GET /docwrite2/_search
{
"query": {
"multi_match": {
"query": "跳板機",
"fields": [
"content",
"title"
],
"analyzer": "ik_smart"
}
},
"_source": {
"excludes": ["content"]
}
}
索引結(jié)構(gòu)簡介
這是一個在Elasticsearch中創(chuàng)建索引(名為"docwrite2")的RESTful API請求,使用PUT方法。該索引具有特定的設(shè)置和映射(數(shù)據(jù)結(jié)構(gòu)定義)。
-
Settings:
-
"number_of_shards": 3
:表示索引將被分成3個分片,這是Elasticsearch水平擴展的基礎(chǔ),可以提高搜索和存儲性能。 -
"number_of_replicas": 2
:每個主分片會有2個副本分片,用于提供高可用性和容錯性,當(dāng)某個節(jié)點失效時,可以從副本分片繼續(xù)提供服務(wù)。
-
-
Mappings:
-
"id"
:類型為"keyword"
,這意味著它將被當(dāng)作不可分割的整體進行索引,常用于精確匹配查詢。 -
"title"
:類型為"text"
,并指定了分析器(analyzer)為"ik_max_word"
,這通常是一個中文分詞器,會對文本內(nèi)容進行最大粒度的分詞處理,便于全文檢索。 -
"fileType"
:同樣為"keyword"
類型,用于存儲文件類型等不需要分詞的屬性信息。 -
"active"
:類型為"boolean"
,用于存儲布爾值類型的字段。 -
"upTime"
:類型為"date"
,并指定了日期格式為"yyyy-MM-dd HH:mm:ss"
,用于存儲日期時間類型的數(shù)據(jù)。 -
"content"
:類型為"text"
,并指定了分析器為"ik_smart"
,這也是一個中文分詞器,但相比"ik_max_word",它傾向于更智能的最少切分策略,更適合用于較短的文本片段或標(biāo)題等內(nèi)容。
-
查詢語句解釋
這個Elasticsearch查詢語句是用來在名為“docwrite2”的索引中搜索包含關(guān)鍵詞“跳板機”的文檔,并且在返回結(jié)果中排除了“content”字段的內(nèi)容。以下是詳細的解析:
-
GET /docwrite2/_search
: 這是一個針對“docwrite2”索引執(zhí)行搜索操作的HTTP GET請求。_search
端點用于執(zhí)行搜索查詢并返回相關(guān)結(jié)果。 -
請求體中的查詢部分:
-
"query": { ... }
:這部分定義了搜索的查詢條件。 -
"multi_match": { ... }
:這是一種復(fù)合查詢類型,允許在一個或多個指定字段上執(zhí)行全文本搜索。在這個例子中:-
"query": "跳板機"
:表示要查找的關(guān)鍵詞是“跳板機”。 -
"fields": ["content", "title"]
:指定要在哪些字段上執(zhí)行搜索,這里包括“content”和“title”兩個字段。 -
"analyzer": "ik_smart"
:指定使用名為“ik_smart”的分析器來分析查詢字符串以及索引中的相應(yīng)字段內(nèi)容。由于之前在映射中為"text"類型的字段指定了中文分詞器,此處選用“ik_smart”分析器來進行智能分詞匹配。
-
-
-
返回結(jié)果控制部分:文章來源:http://www.zghlxwxcb.cn/news/detail-845665.html
-
"_source": { "excludes": ["content"] }
:這一節(jié)控制了返回結(jié)果中原始文檔_source
字段的包含或排除規(guī)則。在這個案例中,要求在返回的每個匹配文檔中排除“content”字段的內(nèi)容,這意味著即使文檔匹配,也不會顯示“content”字段的值。
-
整個查詢語句的作用是從索引“docwrite2”的“content”和“title”字段中查找包含詞語“跳板機”的文檔,并在返回結(jié)果時,不顯示每個匹配文檔的“content”字段內(nèi)容。文章來源地址http://www.zghlxwxcb.cn/news/detail-845665.html
到了這里,關(guān)于使用ES檢索PDF等文檔的全棧方案之前端demo(end)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!