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
nuxt.config.js
의 modules
섹션에 @nuxtjs/lunr-module
추가하세요. {
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 후크 lunr: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 모듈을 내보내지 않으며 트리 셰이크를 수행할 수 없습니다. 이 모듈을 사용하면 다른 모든 언어에 대해 ~8.5KB
+ ~2KB
추가하고 영어를 번들에 추가합니다(gzipped). 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
프로젝트를 빌드할 때 생성된 검색 색인은 웹팩 자산으로 방출됩니다. 이 옵션은 nuxt.publicPath
아래의 경로를 사용해야 하는지 결정합니다.
Nuxt.js 및 이 모듈의 기본 구성을 사용하면
/_nuxt/search-index/en.json
에서 영어 검색 색인을 사용할 수 있습니다.
String
입력하세요id
검색 색인에서 이 문서에 대해 사용해야 하는 참조 항목을 지정하는 문서 속성의 이름입니다.
Array
['title', 'body']
색인이 생성될 문서의 속성 이름
String
입력하세요Search
검색 입력 필드의 자리 표시자에 입력되는 텍스트입니다. nuxt-i18n을 사용하는 경우 lunr-module.placeholderText
키를 사용하여 번역을 제공할 수도 있습니다.
Array<String>
{ fetching: 'Fetching search index', loading: 'Loading search index', searching: 'Searching...', noresults: 'No results found' }
검색 수명 주기 동안 표시되는 상태 메시지입니다. nuxt-i18n을 사용하는 경우 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
사용하여 개발 서버 시작 MIT 라이센스
Copyright (c) 핌리에