使用 lunr.js 對 Nuxt.js 進行預先建構索引的全文搜索
在 Nuxt.js 的建置階段,您可以透過呼叫 nuxt 掛鉤lunr:document
將文件新增至搜尋索引建構器。如果您已配置並沿文件傳遞受支援的區域設置,則將使用指定語言的 lunr 詞幹分析器建立索引。由於 lunr 搜尋索引僅儲存對文件的引用,因此您可以選擇將元屬性與文件一起傳遞,該文件也會新增至搜尋索引。
發行說明
@nuxtjs/lunr-module
依賴項新增到您的專案中$ yarn add @nuxtjs/lunr-module # or npm install @nuxtjs/lunr-module
@nuxtjs/lunr-module
加入nuxt.config.js
的modules
部分 {
modules : [
// Simple usage
'@nuxtjs/lunr-module' ,
// With options
{
src : '@nuxtjs/lunr-module' ,
// These are the default options:
/*
options: {
includeComponent: true,
globalComponent: false,
css: true,
defaultLanguage: 'en',
languages: false,
path: 'search-index',
ref: 'id',
fields: [
'title',
'body'
]
} */
}
]
}
透過呼叫 nuxt hook lunr:documents
documents 新增文檔,如下所示:
const document = {
id : 1 ,
title : 'My Title' ,
body : 'The body'
}
const meta = {
href : '/link/to/page' ,
title : document . title
}
nuxt . callHook ( 'lunr:document' , ( {
locale : 'af' , // optional, default en
document ,
meta // optional
} )
透過配置區域設定選項,您可以指示應為哪些支援的語言建立搜尋索引。如果您透過文件傳遞任何其他區域設置,它將被添加到defaultLanguage
搜尋索引中(並且將列印警告)。
多種語言等於多種搜尋索引
Lunr 預設支援英語,當您只有英文文件時,無需配置或傳遞任何語言環境。
區域設定可以僅包含一種語言或包含一個區域,您可以使用其中任何一種。因此,僅語言(例如nl )和包括領土(例如nl_NL )都可以工作
如果此模組偵測到您的專案使用 nuxt-i18n,則將自動新增 nuxt-i18n 配置的語言環境。您不必配置兩次使用的區域設置,除非您想要對搜尋索引使用不同的區域設定(例如僅一個)。
該模組包括一個可以在您的網站上使用的搜尋元件。使用它的預設插槽來使用元屬性中傳遞的屬性來顯示搜尋結果
< template >
< lunr-search : lang = " lang " >
< template v-slot : default = " { result, index, maxScore, meta } " >
< nuxt-link : to = " meta . href " >
{{ meta . title }}
< span >score: {{ Math . round ( 100 * result . score / maxScore) }}%</ span >
</ nuxt-link >
</ template >
</ lunr-search >
</ template >
< script >
export default {
components : {
// Note: 'lunr-module' below is a custom webpack alias and
// does NOT refer to the folder in node_modules
LunrSearch : () => import ( ' lunr-module/search ' )
}
}
</ script >
文件引用(由 option.ref 定義)在搜尋索引中用於連結所有詞幹詞段。如果您使用頁面路徑作為文件引用,那麼對於路徑為/en/offices/emea/nl/contact
頁面,則該字串值將用於連結所有詞幹詞段。這可能會大量增加搜尋索引的大小,因此建議建立數位文件引用並使用meta
屬性將該文件引用的頁面路徑僅新增至搜尋索引一次。
Lunr 不匯出 ES6 模組,也不能進行 tree-shaking。使用此模組會為您的捆綁包(gzip 壓縮)添加~8.5KB
+ ~2KB
其他語言(然後是英語)。請參閱上面的動態匯入範例,確保 lunr 匯入不包含在您的供應商捆綁包中
搜尋索引儲存為json文件,需要在客戶端進行解析。如果您的搜尋索引的 json 變得非常大,那麼(行動)客戶端可能會出現問題。例如,iOS 上的 Safari 限制每個頂級入口點最多運行 10 秒。請參閱此 Lunr.js 問題以取得可能的解決方法。
Boolean
類型true
如果為 true,則預設搜尋元件將會新增至您的 Nuxt 專案中
您可以使用 webpack 別名
lunr-module/search
導入元件
Boolean
, String
false
如果為真,那麼一個插件將被添加到您的專案中,該插件將全域安裝搜尋元件
設定此選項表示
includeComponent: true
預設情況下,搜尋元件將註冊為lunr-search
,如果您希望使用此名稱,可以將此選項設定為包含您希望使用的名稱的字串
globalComponent : 'my-global-lunr-search'
. . .
< template >
< my-global-lunr-search : lang = "lang" class = "my-search" / >
< / template >
Boolean
類型true
如果包含搜尋元件,此選項決定是否應包含預設 css 樣式
String
'en'
使用的預設語言。如果您傳遞區域設定不支援的文檔,這也是後備語言
String
, Array
undefined
需要為其建立搜尋索引的語言的字串或陣列。
儘管此選項可能看起來多餘(即為什麼不為傳遞的每種語言創建一個搜尋索引),但它提供了一種檢查以防止“流氓”文檔被索引到單獨的索引中。
Object
{}
一個對象,其中包含不支援的語言到支援的詞幹語言的映射(由 lunr 提供)。如果要為 lunr(尚)不支援的語言建立搜尋索引,請使用此選項指定應使用哪種詞幹語言。
String
search-index
在建立專案時,建立的搜尋索引將作為 webpack 資產發出。此選項決定應使用nuxt.publicPath
下的路徑。
使用 Nuxt.js 和此模組的預設配置,英文搜尋索引可在
/_nuxt/search-index/en.json
下使用
String
id
文件中屬性的名稱,指定搜尋索引中該文件應使用的參考內容
Array
['title', 'body']
文件中將被索引的屬性名稱
String
Search
放置在搜尋輸入欄位佔位符中的文字。如果您使用 nuxt-i18n,您也可以使用 key lunr-module.placeholderText
提供翻譯
Array<String>
{ fetching: 'Fetching search index', loading: 'Loading search index', searching: 'Searching...', noresults: 'No results found' }
在搜尋生命週期期間顯示的狀態訊息。如果您使用 nuxt-i18n,您也可以使用 key lunr-module.${key}
提供翻譯。例如,使用lunr-module.noresults
提供未找到結果狀態的翻譯。
如果您想使用這些鉤子,請使用
nuxt.callHook(<name>, <arg>)
({ locale?, document, meta? })
主要鉤子用於將文件新增至搜尋索引。您需要按照描述傳遞一個物件。兩種語言環境作為元都是可選的。如果沒有傳遞區域設置,則將使用defaultLanguage
語言
如果您想使用這些鉤子,請使用
nuxt.hook(<name>, <callback>)
。回呼函數接收列出的參數
({ locale, builder })
如果您想註冊自訂 lunr 插件,請使用此掛鉤
在實例化 lunr 建構器之後但在新增語言外掛程式或設定任何參考和欄位之前呼叫此掛鉤
({ locale, builder })
如果您想為索引添加額外的文檔,請使用此鉤子
在設定 lunr 建構器後,即在將文件新增至索引之前,會呼叫此掛鉤。
({ locale, builder, index })
如果您希望在匯出索引之前與索引進行交互,請使用此掛鉤
該鉤子在索引導出為 json 物件之前調用
({ locale, json })
如果您希望操作作為區域設定的搜尋索引發出的 json,請使用此掛鉤
在 webpack 編譯期間,在搜尋索引準備作為資產發出之前,會呼叫此鉤子
yarn install
或npm install
安裝依賴項npm run dev
啟動開發伺服器麻省理工學院許可證
版權所有 (c) 皮姆利