yunu7067 / blogwalk-with-astro

Markdown Static Blog with Astro
MIT License
1 stars 0 forks source link

클라이언트 검색 기능 추가 #17

Open yunu7067 opened 2 years ago

yunu7067 commented 2 years ago

Is your feature request related to a problem? Please describe. A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

Describe the solution you'd like A clear and concise description of what you want to happen.

Describe alternatives you've considered

클라이언트 사이드

온라인 서비스

Additional context Add any other context or screenshots about the feature request here.

yunu7067 commented 2 years ago
yunu7067 commented 2 years ago

FlexSearch 0.7.0

코드

const { Index, Document, Worker } = require("flexsearch");

const index = new Document({
    id: "id",
    index: [{
        field: "title",
        encode: str => str.replace(/[\x00-\x7F]/g, "").split("")
    }, {
        field: "desc",
        encode: str => str.replace(/[\x00-\x7F]/g, "").split("")
    }]
});

function indexing(data) {
  index.add(data);
}
async function searching(text) {
  const result = await index.search(text);
  console.debug(text)
  console.debug(result)
}
async function exporting() {
  index.export((k, d) => {
    console.log({k, d})
  })
}

indexing({
    id: 1,
    title: '통제 어휘(Controlled Vocabulary)',
    desc: `통제 어휘는 더블린 코어 메타데이터 요소의 의미 구조를 정의하는데 매우 중요한 역할을 한다. DCMI 커뮤니티는 메타데이터 구문에 들어가야 하는 값(value)을 관리하기 위해 ‘인코딩 스킴(encoding schemes)’을 정의하였다. 예를 들어, ‘언어(Language)’에 대한 메타데이터 값을 입력하는 방법에는 자연어도 있지만, “English” “en” “eng” 나 “en-US”와 같은 통제어를 사용할 수도 있다. 만약 ‘언어’에 대한 통제어를 국제표준 ISO639-2, Codes for the Representation of Names of Languages에 준하여 기술하면 영어(English)는 코드 “eng”로 기술한다. 인코딩 스킴은 어휘 인코딩 스킴과 구문 인코딩 스킴으로 구분할 수 있다. 먼저, 어휘 인코딩 스킴은 특정 요소에 대한 전거형 어휘(통제어)들을 제공한다. 미의회도서관주제명표목(LCSH)와 의학주제명표목(MeSH), 국립중앙도서관 주제명표목(NLSH)과 같이 일반적으로 사용되는 주제명표목과 듀이십진분류법(Dewey Decimal Classification, DDC), 국제십진분류법(Universal Decimal Classification, UDC), 미의회도서관분류법(Library of Congress Classification, LCC)와 같은 분류체계, DCMI Type Vocabulary와 같은 DCMI(Dublin Core Metadata Initiative)가 만든 용어, 기타 특수 스킴들이 해당된다. 다음으로, 구문 인코딩 스킴은 요소의 값을 일정한 규칙에 따라 기술하기 위한 표준화된 방법을 제공한다. 예를 들어, “2007-11-08”은 ISO 8601의 W3CDTF(W3C Encoding Rules for Dates and Times) 방식을 따르는 것이다. 이러한 인코딩 스팀은 해당 값의 의미를 2007년 11월 8일로 해석할 수 있는 일종의 근거를 제공한다.`,
});

indexing({
    id: 2,
    title: '확장(extensions)과 상세구분(refinements)',
    desc: `2000년 더블린 코어 이용 위원회(Dublin Core Usage Committee)는 요소의 의미적 정확성을 높이기 위해 한정어(qualifiers)를 도입하였다. 예를 들어, "tableOfContent"는 "description" 요소, "issued"는 "date" 요소의 의미를 제한함으로써 요소를 사용하거나 해석하는데 정확성을 높일 수 있다. 한정어는 15개 핵심 요소와 함께 "Qualified Dublin Core"로, 기존 15개 요소는 "Simple Dublin Core"로 부른다.

    현재는 ‘한정어’ 대신 ‘상세구분(refinement)’이란 용어를 사용한다. 과거에 한정어는 ‘ABC’과 같은 구문으로 상세구분의 대상이 되는 요소와 함께 사용되었다. 그러나 2003년 이후로 모든 상세구분은 ‘DCMI Metadata Terms’ 문서에서 정의되는 용어로 선언되었고, 상세구분 요소들이 일종의 속성(properties)으로 간주되었다. 이를 통해 상세구분은 ‘ABC’와 같이 독립된 메타데이터 요소로써 기술한다.

    DCMI의 모든 메타데이터 용어는 아래의 DCMI 네임스페이스(namespace)에서 고유한 식별성을 갖는다.

    · http://purl.org/dc/elements/1.1 : DC의 15개 요소를 위한 네임스페이스
    · http://purl.org/dc/terms/ : DC의 15개 요소를 위한 네임스페이스
    · http://purl.org/dc/dcmitype : DC의 15개 요소를 위한 네임스페이스
    예를 들면, ‘title’ 요소는 dc:에서 " http://purl.org/dc/elements/1.1/title " 또는 dcterms:의 " http://purl.org/dc/terms/ "에서 Uniform Resource Identifier(URI) 형태로 정의된다. 이외에도 다양한 주제 분야의 커뮤니티들의 요구를 반영해서 ’Audience’와 같은 상세구분 속성들이 도출되었다. 그러나 이러한 요소들은 반드시 DC Usage Board의 승인이 필요하다.`,
});

searching("인코딩");

searching("메타데이");

exporting();

인덱싱 결과

{ k: 'reg', d: '{"1":1,"2":1}' }
{ k: 'title.cfg', d: '{"doc":0,"opt":1}' }
{
  k: 'title.map',
  d: '[{"통":[1],"확":[2]},{"제":[1],"장":[2]},{"어":[1],"과":[2]},{"휘":[1],"상":[2]},{"세":[2]},{"구":[2]},{"분":[2]},{},{}]'
}
{ k: 'title.ctx', d: '[{}]' }
{ k: 'desc.cfg', d: '{"doc":0,"opt":1}' }
{
  k: 'desc.map',
  d: '[{"통":[1],"년":[2]},{"제":[1,2],"어":[1,2],"휘":[1],"는":[1,2],"더":[1,2],"블":[1,2],"린":[1,2],"코":[1,2],"메":[1],"타":[1],"데":[1],"이":[1,2],"터":[1],"요":[1,2],"소":[1,2],"의":[1,2],"미":[1,2],"구":[1],"조":[1],"를":[1,2],"정":[1,2],"하":[1,2],"매":[1],"우":[1],"중":[1],"한":[1,2],"역":[1],"할":[1],"을":[1,2],"다":[1,2],"커":[1],"뮤":[1],"니":[1],"티":[1],"문":[1],"에":[1],"들":[1,2],"가":[1],"용":[2],"위":[2],"원":[2],"회":[2],"적":[2],"확":[2],"성":[2],"높":[2],"기":[2],"해":[2],"도":[2],"입":[2],"였":[2],"예":[2]},{"야":[1],"값":[1],"관":[1],"리":[1],"기":[1],"위":[1],"해":[1],"‘":[1],"인":[1],"딩":[1],"스":[1],"킴":[1],"’":[1],"였":[1],"예":[1],"언":[1],"대":[1],"입":[1],"력":[1],"방":[1],"법":[1],"자":[1],"연":[1],"함":[2],"으":[2],"로":[2],"써":[2],"사":[2],"거":[2],"나":[2],"석":[2],"데":[2],"일":[2],"수":[2],"있":[2],"개":[2],"핵":[2],"심":[2],"와":[2],"께":[2],"존":[2],"부":[2],"른":[2],"현":[2]},{"도":[1],"있":[1],"지":[1],"만":[1],"“":[1],"”":[1],"나":[1],"와":[1],"같":[1,2],"은":[1,2],"사":[1],"용":[1],"수":[1],"약":[1],"국":[1],"표":[1],"준":[1],"여":[1],"술":[1],"면":[1],"영":[1],"재":[2],"‘":[2],"’":[2],"대":[2],"신":[2],"상":[2],"세":[2],"구":[2],"분":[2],"란":[2],"과":[2],"에":[2],"문":[2],"되":[2]},{"드":[1],"로":[1],"과":[1],"으":[1],"분":[1],"먼":[1],"저":[1],"특":[1],"었":[2],"그":[2],"러":[2],"후":[2],"모":[2],"든":[2],"서":[2],"선":[2],"언":[2],"고":[2]},{"전":[1],"거":[1],"형":[1],"공":[1],"회":[1],"서":[1],"주":[1,2],"명":[1],"목":[1],"학":[1],"립":[1,2],"앙":[1],"일":[1],"종":[2],"속":[2],"간":[2],"통":[2],"독":[2],"된":[2],"메":[2],"타":[2],"터":[2],"술":[2]},{"반":[1],"적":[1],"되":[1],"듀":[1],"십":[1],"진":[1],"류":[1],"체":[1],"계":[1],"든":[1],"아":[2],"래":[2],"네":[2],"임":[2],"스":[2],"페":[2],"유":[2],"식":[2],"별":[2],"갖":[2],"·":[2]},{"당":[1],"된":[1],"음":[1],"규":[1],"칙":[1],"따":[1],"라":[1],"화":[1],"면":[2],"또":[2],"형":[2],"태":[2],"외":[2],"양":[2],"야":[2],"커":[2],"뮤":[2]},{"식":[1],"르":[1],"것":[1],"러":[1],"팀":[1],"년":[1],"월":[1],"석":[1],"종":[1],"근":[1],"니":[2],"티":[2],"반":[2],"영":[2],"출":[2],"드":[2],"시":[2],"승":[2],"인":[2],"필":[2]}]'
}
{ k: 'desc.ctx', d: '[{}]' }
{ k: 'tag', d: undefined }
{ k: 'store', d: undefined }

인덱싱이 한 글자씩 됨

yunu7067 commented 2 years ago

코드

const { Index, Document, Worker } = require("flexsearch");

const index = new Document({
    cache: 100,
    tokenize: 'full',
    document: {
        id: 'id',
        index: 'content',
        tag: 'pageId',
        store: ['title', 'content', 'url', 'display']
    },
    context: {
        resolution: 9,
        depth: 2,
        bidirectional: true
    }
  });

function indexing(data) {
  index.add(data);
}
async function searching(text) {
  const result = await index.search(text, {
    enrich: true,
    suggest: true
  });

  console.debug(text)
  console.debug(result[0])
  console.debug(result[0].field)
  console.debug(result[0].result)
}
async function exporting() {
  index.export((k, d) => {
    console.log({k, d})
  })
}

indexing({
    id: "1",
    url: "test",
    pageId: "1",
    title: '통제 어휘(Controlled Vocabulary)',
    content: `통제 어휘는 더블린 코어 메타데이터 요소의 의미 구조를 정의하는데 매우 중요한 역할을 한다. DCMI 커뮤니티는 메타데이터 구문에 들어가야 하는 값(value)을 관리하기 위해 ‘인코딩 스킴(encoding schemes)’을 정의하였다. 예를 들어, ‘언어(Language)’에 대한 메타데이터 값을 입력하는 방법에는 자연어도 있지만, “English” “en” “eng” 나 “en-US”와 같은 통제어를 사용할 수도 있다. 만약 ‘언어’에 대한 통제어를 국제표준 ISO639-2, Codes for the Representation of Names of Languages에 준하여 기술하면 영어(English)는 코드 “eng”로 기술한다. 인코딩 스킴은 어휘 인코딩 스킴과 구문 인코딩 스킴으로 구분할 수 있다. 먼저, 어휘 인코딩 스킴은 특정 요소에 대한 전거형 어휘(통제어)들을 제공한다. 미의회도서관주제명표목(LCSH)와 의학주제명표목(MeSH), 국립중앙도서관 주제명표목(NLSH)과 같이 일반적으로 사용되는 주제명표목과 듀이십진분류법(Dewey Decimal Classification, DDC), 국제십진분류법(Universal Decimal Classification, UDC), 미의회도서관분류법(Library of Congress Classification, LCC)와 같은 분류체계, DCMI Type Vocabulary와 같은 DCMI(Dublin Core Metadata Initiative)가 만든 용어, 기타 특수 스킴들이 해당된다. 다음으로, 구문 인코딩 스킴은 요소의 값을 일정한 규칙에 따라 기술하기 위한 표준화된 방법을 제공한다. 예를 들어, “2007-11-08”은 ISO 8601의 W3CDTF(W3C Encoding Rules for Dates and Times) 방식을 따르는 것이다. 이러한 인코딩 스팀은 해당 값의 의미를 2007년 11월 8일로 해석할 수 있는 일종의 근거를 제공한다.`,
    display: "1"
});

indexing({
    id: "2",
    url: "test",
    pageId: "2",
    display: "1",
    title: '확장(extensions)과 상세구분(refinements)',
    content: `2000년 더블린 코어 이용 위원회(Dublin Core Usage Committee)는 요소의 의미적 정확성을 높이기 위해 한정어(qualifiers)를 도입하였다. 예를 들어, "tableOfContent"는 "description" 요소, "issued"는 "date" 요소의 의미를 제한함으로써 요소를 사용하거나 해석하는데 정확성을 높일 수 있다. 한정어는 15개 핵심 요소와 함께 "Qualified Dublin Core"로, 기존 15개 요소는 "Simple Dublin Core"로 부른다.

    현재는 ‘한정어’ 대신 ‘상세구분(refinement)’이란 용어를 사용한다. 과거에 한정어는 ‘ABC’과 같은 구문으로 상세구분의 대상이 되는 요소와 함께 사용되었다. 그러나 2003년 이후로 모든 상세구분은 ‘DCMI Metadata Terms’ 문서에서 정의되는 용어로 선언되었고, 상세구분 요소들이 일종의 속성(properties)으로 간주되었다. 이를 통해 상세구분은 ‘ABC’와 같이 독립된 메타데이터 요소로써 기술한다.

    DCMI의 모든 메타데이터 용어는 아래의 DCMI 네임스페이스(namespace)에서 고유한 식별성을 갖는다.

    · http://purl.org/dc/elements/1.1 : DC의 15개 요소를 위한 네임스페이스
    · http://purl.org/dc/terms/ : DC의 15개 요소를 위한 네임스페이스
    · http://purl.org/dc/dcmitype : DC의 15개 요소를 위한 네임스페이스
    예를 들면, ‘title’ 요소는 dc:에서 " http://purl.org/dc/elements/1.1/title " 또는 dcterms:의 " http://purl.org/dc/terms/ "에서 Uniform Resource Identifier(URI) 형태로 정의된다. 이외에도 다양한 주제 분야의 커뮤니티들의 요구를 반영해서 ’Audience’와 같은 상세구분 속성들이 도출되었다. 그러나 이러한 요소들은 반드시 DC Usage Board의 승인이 필요하다.`,
});

// searching("인코딩");
// searching("메타데이");

exporting();

인덱싱 결과

{ k: 'reg', d: '{"1":1,"2":1}' }
{ k: 'content.cfg', d: '{"doc":0,"opt":1}' }
{
  k: 'content.map',
  d: '[{"0":["2"],"2":["2"],"20":["2"],"200":["2"],"2000":["2"],"통":["1"],"통제":["1"],"2000년":["2"],"000년":["2"],"000":["2"],"00":["2"],"00년":["2"],"0년":["2"],"년":["2"]},{"는":["1","2"],"휘는":["1"],"어":["1","2"],"어휘":["1"],"어휘는":["1"],"린":["1","2"],"블린":["1","2"],"더":["1","2"],"더블":["1","2"],"더블린":["1","2"],"코":["1","2"],"코어":["1","2"],"메타데이터":["1"],"메타데이":["1"],"메타데":["1"],"메타":["1"],"메":["1"],"타데이터":["1"],"타데이":["1"],"타데":["1"],"타":["1"],"데이터":["1"],"데이":["1"],"데":["1"],"이터":["1"],"이":["1","2"],"터":["1"],"의":["1","2"],"소의":["1","2"],"요":["1","2"],"요소":["1","2"],"요소의":["1","2"],"의미":["1","2"],"를":["1","2"],"조를":["1"],"구":["1"],"구조":["1"],"구조를":["1"],"정의하는데":["1"],"정의하는":["1"],"정의하":["1"],"정의":["1"],"정":["1","2"],"의하는데":["1"],"의하는":["1"],"의하":["1"],"하는데":["1"],"하는":["1"],"하":["1","2"],"는데":["1"],"매":["1"],"매우":["1"],"한":["1","2"],"요한":["1"],"중":["1"],"중요":["1"],"중요한":["1"],"을":["1","2"],"할을":["1"],"역":["1"],"역할":["1"],"역할을":["1"],"한다":["1"],"dcmi":["1"],"dcm":["1"],"dc":["1"],"d":["1","2"],"cmi":["1"],"cm":["1"],"c":["1","2"],"mi":["1","2"],"m":["1","2"],"i":["1","2"],"커뮤니티는":["1"],"커뮤니티":["1"],"커뮤니":["1"],"커뮤":["1"],"커":["1"],"뮤니티는":["1"],"뮤니티":["1"],"뮤니":["1"],"뮤":["1"],"니티는":["1"],"니티":["1"],"니":["1"],"티는":["1"],"티":["1"],"에":["1"],"문에":["1"],"구문":["1"],"구문에":["1"],"들어가야":["1"],"들어가":["1"],"들어":["1","2"],"들":["1","2"],"어가야":["1"],"어가":["1"],"가야":["1"],"가":["1"],"야":["1"],"값":["1"],"value":["1"],"valu":["1"],"val":["1"],"va":["1"],"v":["1"],"alue":["1"],"alu":["1"],"al":["1","2"],"a":["1","2"],"lue":["1"],"lu":["1"],"l":["1","2"],"ue":["1"],"u":["1","2"],"e":["1","2"],"관리하기":["1"],"관리하":["1"],"관리":["1"],"관":["1"],"리하기":["1"],"리하":["1"],"리":["1"],"하기":["1"],"기":["1","2"],"위":["1","2"],"위해":["1","2"],"코딩":["1"],"인":["1"],"인코":["1"],"인코딩":["1"],"이용":["2"],"회":["2"],"원회":["2"],"위원":["2"],"위원회":["2"],"dublin":["2"],"dubli":["2"],"dubl":["2"],"dub":["2"],"du":["2"],"ublin":["2"],"ubli":["2"],"ubl":["2"],"ub":["2"],"blin":["2"],"bli":["2"],"bl":["2"],"b":["2"],"lin":["2"],"li":["2"],"in":["2"],"n":["2"],"core":["2"],"cor":["2"],"co":["2"],"ore":["2"],"or":["2"],"o":["2"],"re":["2"],"r":["2"],"usage":["2"],"usag":["2"],"usa":["2"],"us":["2"],"sage":["2"],"sag":["2"],"sa":["2"],"s":["2"],"age":["2"],"ag":["2"],"ge":["2"],"g":["2"],"committee":["2"],"committe":["2"],"committ":["2"],"commit":["2"],"commi":["2"],"comm":["2"],"com":["2"],"ommittee":["2"],"ommitte":["2"],"ommitt":["2"],"ommit":["2"],"ommi":["2"],"omm":["2"],"om":["2"],"mmittee":["2"],"mmitte":["2"],"mmitt":["2"],"mmit":["2"],"mmi":["2"],"mm":["2"],"mittee":["2"],"mitte":["2"],"mitt":["2"],"mit":["2"],"ittee":["2"],"itte":["2"],"itt":["2"],"it":["2"],"ttee":["2"],"tte":["2"],"tt":["2"],"t":["2"],"tee":["2"],"te":["2"],"ee":["2"],"적":["2"],"미적":["2"],"의미적":["2"],"정확성을":["2"],"정확성":["2"],"정확":["2"],"확성을":["2"],"확성":["2"],"확":["2"],"성을":["2"],"성":["2"],"이기":["2"],"높":["2"],"높이":["2"],"높이기":["2"],"정어":["2"],"한정":["2"],"한정어":["2"],"qualifiers":["2"],"qualifier":["2"],"qualifie":["2"],"qualifi":["2"],"qualif":["2"],"quali":["2"],"qual":["2"],"qua":["2"],"qu":["2"],"q":["2"],"ualifiers":["2"],"ualifier":["2"],"ualifie":["2"],"ualifi":["2"],"ualif":["2"],"uali":["2"],"ual":["2"],"ua":["2"],"alifiers":["2"],"alifier":["2"],"alifie":["2"],"alifi":["2"],"alif":["2"],"ali":["2"],"lifiers":["2"],"lifier":["2"],"lifie":["2"],"lifi":["2"],"lif":["2"],"ifiers":["2"],"ifier":["2"],"ifie":["2"],"ifi":["2"],"if":["2"],"fiers":["2"],"fier":["2"],"fie":["2"],"fi":["2"],"f":["2"],"iers":["2"],"ier":["2"],"ie":["2"],"ers":["2"],"er":["2"],"rs":["2"],"도입하였다":["2"],"도입하였":["2"],"도입하":["2"],"도입":["2"],"도":["2"],"입하였다":["2"],"입하였":["2"],"입하":["2"],"입":["2"],"하였다":["2"],"하였":["2"],"였다":["2"],"였":["2"],"다":["2"],"예":["2"],"예를":["2"],"tableofcontent":["2"],"tableofconten":["2"],"tableofconte":["2"],"tableofcont":["2"],"tableofcon":["2"],"tableofco":["2"],"tableofc":["2"],"tableof":["2"],"tableo":["2"],"table":["2"],"tabl":["2"],"tab":["2"],"ta":["2"],"ableofcontent":["2"],"ableofconten":["2"],"ableofconte":["2"],"ableofcont":["2"],"ableofcon":["2"],"ableofco":["2"],"ableofc":["2"],"ableof":["2"],"ableo":["2"],"able":["2"],"abl":["2"],"ab":["2"],"bleofcontent":["2"],"bleofconten":["2"],"bleofconte":["2"],"bleofcont":["2"],"bleofcon":["2"],"bleofco":["2"],"bleofc":["2"],"bleof":["2"],"bleo":["2"],"ble":["2"],"leofcontent":["2"],"leofconten":["2"],"leofconte":["2"],"leofcont":["2"],"leofcon":["2"],"leofco":["2"],"leofc":["2"],"leof":["2"],"leo":["2"],"le":["2"],"eofcontent":["2"],"eofconten":["2"],"eofconte":["2"],"eofcont":["2"],"eofcon":["2"],"eofco":["2"],"eofc":["2"],"eof":["2"],"eo":["2"],"ofcontent":["2"],"ofconten":["2"],"ofconte":["2"],"ofcont":["2"],"ofcon":["2"],"ofco":["2"],"ofc":["2"],"of":["2"],"description":["2"],"descriptio":["2"],"descripti":["2"],"descript":["2"],"descrip":["2"],"descri":["2"],"descr":["2"],"desc":["2"],"des":["2"],"de":["2"],"escription":["2"],"escriptio":["2"],"escripti":["2"],"escript":["2"],"escrip":["2"],"escri":["2"],"escr":["2"],"esc":["2"],"es":["2"],"scription":["2"],"scriptio":["2"],"scripti":["2"],"script":["2"],"scrip":["2"],"scri":["2"],"scr":["2"],"sc":["2"],"cription":["2"],"criptio":["2"],"cripti":["2"],"cript":["2"],"crip":["2"],"cri":["2"],"cr":["2"],"issued":["2"],"issue":["2"],"issu":["2"],"iss":["2"],"is":["2"]},{"1":["2"],"15":["2"],"딩":["1"],"스":["1"],"스킴":["1"],"encoding":["1"],"encodin":["1"],"encodi":["1"],"encod":["1"],"enco":["1"],"enc":["1"],"en":["1","2"],"ncoding":["1"],"ncodin":["1"],"ncodi":["1"],"ncod":["1"],"nco":["1"],"nc":["1"],"n":["1"],"coding":["1"],"codin":["1"],"codi":["1"],"cod":["1"],"co":["1"],"oding":["1"],"odin":["1"],"odi":["1"],"od":["1"],"o":["1"],"ding":["1"],"din":["1"],"di":["1"],"ing":["1"],"in":["1"],"ng":["1"],"g":["1"],"schemes":["1"],"scheme":["1"],"schem":["1"],"sche":["1"],"sch":["1"],"sc":["1"],"s":["1"],"chemes":["1"],"cheme":["1"],"chem":["1"],"che":["1"],"ch":["1"],"hemes":["1"],"heme":["1"],"hem":["1"],"he":["1"],"h":["1"],"emes":["1"],"eme":["1"],"em":["1"],"mes":["1"],"me":["1"],"es":["1"],"정의하였다":["1"],"정의하였":["1"],"의하였다":["1"],"의하였":["1"],"하였다":["1"],"하였":["1"],"였다":["1"],"였":["1"],"다":["1"],"예":["1"],"예를":["1"],"언":["1"],"언어":["1"],"language":["1"],"languag":["1"],"langua":["1"],"langu":["1"],"lang":["1"],"lan":["1"],"la":["1"],"anguage":["1"],"anguag":["1"],"angua":["1"],"angu":["1"],"ang":["1"],"an":["1"],"nguage":["1"],"nguag":["1"],"ngua":["1"],"ngu":["1"],"guage":["1"],"guag":["1"],"gua":["1"],"gu":["1"],"uage":["1"],"uag":["1"],"ua":["1"],"age":["1"],"ag":["1"],"ge":["1"],"대":["1"],"대한":["1"],"값을":["1"],"입력하는":["1"],"입력하":["1"],"입력":["1"],"입":["1"],"력하는":["1"],"력하":["1"],"력":["1"],"방법에는":["1"],"방법에":["1"],"방법":["1"],"방":["1"],"법에는":["1"],"법에":["1"],"법":["1"],"에는":["1"],"자연어도":["1"],"자연어":["1"],"자연":["1"],"자":["1"],"연어도":["1"],"연어":["1"],"연":["1"],"어도":["1"],"도":["1"],"만":["1"],"지만":["1"],"있":["1","2"],"있지":["1"],"있지만":["1"],"english":["1"],"englis":["1"],"engli":["1"],"engl":["1"],"eng":["1"],"nglish":["1"],"nglis":["1"],"ngli":["1"],"ngl":["1"],"glish":["1"],"glis":["1"],"gli":["1"],"gl":["1"],"lish":["1"],"lis":["1"],"li":["1"],"ish":["1"],"is":["1"],"sh":["1"],"나":["1","2"],"us":["1"],"와":["1","2"],"같":["1"],"같은":["1"],"통제어를":["1"],"통제어":["1"],"fcontent":["2"],"fconten":["2"],"fconte":["2"],"fcont":["2"],"fcon":["2"],"fco":["2"],"fc":["2"],"content":["2"],"conten":["2"],"conte":["2"],"cont":["2"],"con":["2"],"ontent":["2"],"onten":["2"],"onte":["2"],"ont":["2"],"on":["2"],"ntent":["2"],"nten":["2"],"nte":["2"],"nt":["2"],"tent":["2"],"ten":["2"],"ent":["2"],"ription":["2"],"riptio":["2"],"ripti":["2"],"ript":["2"],"rip":["2"],"ri":["2"],"iption":["2"],"iptio":["2"],"ipti":["2"],"ipt":["2"],"ip":["2"],"ption":["2"],"ptio":["2"],"pti":["2"],"pt":["2"],"p":["2"],"tion":["2"],"tio":["2"],"ti":["2"],"ion":["2"],"io":["2"],"ssued":["2"],"ssue":["2"],"ssu":["2"],"ss":["2"],"sued":["2"],"sue":["2"],"su":["2"],"ued":["2"],"ue":["2"],"ed":["2"],"date":["2"],"dat":["2"],"da":["2"],"ate":["2"],"at":["2"],"미를":["2"],"의미를":["2"],"제한함으로써":["2"],"제한함으로":["2"],"제한함으":["2"],"제한함":["2"],"제한":["2"],"제":["2"],"한함으로써":["2"],"한함으로":["2"],"한함으":["2"],"한함":["2"],"함으로써":["2"],"함으로":["2"],"함으":["2"],"함":["2"],"으로써":["2"],"으로":["2"],"으":["2"],"로써":["2"],"로":["2"],"써":["2"],"소를":["2"],"요소를":["2"],"사용하거나":["2"],"사용하거":["2"],"사용하":["2"],"사용":["2"],"사":["2"],"용하거나":["2"],"용하거":["2"],"용하":["2"],"용":["2"],"하거나":["2"],"하거":["2"],"거나":["2"],"거":["2"],"해석하는데":["2"],"해석하는":["2"],"해석하":["2"],"해석":["2"],"해":["2"],"석하는데":["2"],"석하는":["2"],"석하":["2"],"석":["2"],"하는데":["2"],"하는":["2"],"는데":["2"],"데":["2"],"높일":["2"],"수":["2"],"있다":["2"],"한정어는":["2"],"정어는":["2"],"어는":["2"],"개":["2"],"5개":["2"],"15개":["2"],"핵":["2"],"핵심":["2"],"소와":["2"],"요소와":["2"],"함께":["2"],"qualified":["2"],"ualified":["2"],"alified":["2"],"lified":["2"],"ified":["2"],"fied":["2"],"ied":["2"],"기존":["2"],"소는":["2"],"요소는":["2"],"simple":["2"],"simpl":["2"],"simp":["2"],"sim":["2"],"si":["2"],"imple":["2"],"impl":["2"],"imp":["2"],"im":["2"]},{"2":["1"],"3":["1"],"6":["1"],"9":["1"],"39":["1"],"63":["1"],"639":["1"],"2003":["2"],"제어를":["1"],"제어":["1"],"제":["1"],"어를":["1","2"],"할":["1"],"용할":["1"],"사":["1"],"사용":["1"],"사용할":["1"],"수":["1"],"수도":["1"],"있다":["1"],"만약":["1"],"국제표준":["1"],"국제표":["1"],"국제":["1"],"국":["1"],"제표준":["1"],"제표":["1"],"표준":["1"],"표":["1"],"준":["1"],"iso639":["1"],"iso63":["1"],"iso6":["1"],"iso":["1"],"so639":["1"],"so63":["1"],"so6":["1"],"so":["1"],"o639":["1"],"o63":["1"],"o6":["1"],"codes":["1"],"code":["1"],"odes":["1"],"ode":["1"],"des":["1"],"de":["1"],"r":["1"],"or":["1"],"f":["1"],"fo":["1"],"for":["1"],"t":["1"],"th":["1"],"the":["1"],"representation":["1"],"representatio":["1"],"representati":["1"],"representat":["1"],"representa":["1"],"represent":["1"],"represen":["1"],"represe":["1"],"repres":["1"],"repre":["1"],"repr":["1"],"rep":["1"],"re":["1"],"epresentation":["1"],"epresentatio":["1"],"epresentati":["1"],"epresentat":["1"],"epresenta":["1"],"epresent":["1"],"epresen":["1"],"eprese":["1"],"epres":["1"],"epre":["1"],"epr":["1'... 18354 more characters
}
{ k: 'content.ctx', d: '[{},{},{},{},{},{},{},{},{}]' }
{ k: 'tag', d: '{"1":["1"],"2":["2"]}' }
{
  k: 'store',
  d: '{"1":{"title":"통제 어휘(Controlled Vocabulary)","content":"통제 어휘는 더블린 코어 메타데이터 요소의 의미 구조를 정의하는데 매우 중요한 역할을 한다. DCMI 커뮤니티는 메타데이터 구문에 들어가야 하는 값(value)을 관리하기 위해 ‘인코딩 스킴(encoding schemes)’을 정의하였다. 예를 들어, ‘언어(Language)’에 대한 메타데이터 값을 입력하는 방법에는 자연어도 있지만, “English” “en” “eng” 나 “en-US”와 같은 통제어를 사용할 수도 있다. 만약 ‘언어’에 대한 통제어를 국제표준 ISO639-2, Codes for the Representation of Names of Languages에 준하여 기술하면 영어(English)는 코드 “eng”로 기술한다. 인코딩 스킴은 어휘 인코딩 스킴과 구문 인코딩 스킴으로 구분할 수 있다. 먼저, 어휘 인코딩 스킴은 특정 요소에 대한 전거형 어휘(통제어)들을 제공한다. 미의회도서관주제명표목(LCSH)와 의학주제명표목(MeSH), 국립중앙도서관 주제명표목(NLSH)과 같이 일반적으로 사용되는 주제명표목과 듀이십진분류법(Dewey Decimal Classification, DDC), 국제십진분류법(Universal Decimal Classification, UDC), 미의회도서관분류법(Library of Congress Classification, LCC)와 같은 분류체계, DCMI Type Vocabulary와 같은 DCMI(Dublin Core Metadata Initiative)가 만든 용어, 기타 특수 스킴들이 해당된다. 다음으로, 구문 인코딩 스킴은 요소의 값을 일정한 규칙에 따라 기술하기 위한 표준화된 방법을 제공한다. 예를 들어, “2007-11-08”은 ISO 8601의 W3CDTF(W3C Encoding Rules for Dates and Times) 방식을 따르는 것이다. 이러한 인코딩 스팀은 해당 값의 의미를 2007년 11월 8일로 해석할 수 있는 일종의 근거를 제공한다.","url":"test","display":"1"},"2":{"title":"확장(extensions)과 상세구분(refinements)","content":"2000년 더블린 코어 이용 위원회(Dublin Core Usage Committee)는 요소의 의미적 정확성을 높이기 위해 한정어(qualifiers)를 도입하였다. 예를 들어, \\"tableOfContent\\"는 \\"description\\" 요소, \\"issued\\"는 \\"date\\" 요소의 의미를 제한함으로써 요소를 사용하거나 해석하는데 정확성을 높일 수 있다. 한정어는 15개 핵심 요소와 함께 \\"Qualified Dublin Core\\"로, 기존 15개 요소는 \\"Simple Dublin Core\\"로 부른다.\\n\\n\\t현재는 ‘한정어’ 대신 ‘상세구분(refinement)’이란 용어를 사용한다. 과거에 한정어는 ‘ABC’과 같은 구문으로 상세구분의 대상이 되는 요소와 함께 사용되었다. 그러나 2003년 이후로 모든 상세구분은 ‘DCMI Metadata Terms’ 문서에서 정의되는 용어로 선언되었고, 상세구분 요소들이 일종의 속성(properties)으로 간주되었다. 이를 통해 상세구분은 ‘ABC’와 같이 독립된 메타데이터 요소로써 기술한다.\\n\\t\\n\\tDCMI의 모든 메타데이터 용어는 아래의 DCMI 네임스페이스(namespace)에서 고유한 식별성을 갖는다.\\n\\t\\n\\t· http://purl.org/dc/elements/1.1 : DC의 15개 요소를 위한 네임스페이스\\n\\t· http://purl.org/dc/terms/ : DC의 15개 요소를 위한 네임스페이스\\n\\t· http://purl.org/dc/dcmitype : DC의 15개 요소를 위한 네임스페이스\\n\\t예를 들면, ‘title’ 요소는 dc:에서 \\" http://purl.org/dc/elements/1.1/title \\" 또는 dcterms:의 \\" http://purl.org/dc/terms/ \\"에서 Uniform Resource Identifier(URI) 형태로 정의된다. 이외에도 다양한 주제 분야의 커뮤니티들의 요구를 반영해서 ’Audience’와 같은 상세구분 속성들이 도출되었다. 그러나 이러한 요소들은 반드시 DC Usage Board의 승인이 필요하다.","url":"test","display":"1"}}'
}

원본 텍스트가 같이 출력됨. 인덱싱 방식은 그냥 문자열을 쪼개서 출력하는 듯.

yunu7067 commented 2 years ago

인덱싱은 빌드할 때 같이 하고, 검색은 web woker나 service worker로 분리하는 것이 좋아보임