한글검색 오류 해결

한글검색 오류 해결

2023년 7월 1일

이전 한글검색 방식의 문제점 #

한글 검색을 사용하기 위해 config 파일에서 defaultContentLanguage 를 “ko” 로 설정했었다. 이렇게 설정해주니 한글은 검색이 잘 됐지만, 영어 검색이 막혀버렸다.

hugobook에서는 flexsearch 라는 라이브러리로 검색기능이 구현되어 있는데 search.js 파일을 보면 FlexSearch 객체 생성중에 i18n의 bookSearchConfig로 설정을 초기화하는것을 볼 수 있다.

 1// hugo-book/assets/search.js
 2{{ $searchConfig := i18n "bookSearchConfig" | default "{}" }}
 3
 4(function () {
 5  const searchDataURL = '{{ $searchData.RelPermalink }}';
 6  const indexConfig = Object.assign({{ $searchConfig }}, {
 7    doc: {
 8      id: 'id',
 9      field: ['title', 'content'],
10      store: ['title', 'href', 'section']
11    }
12  });

defaultContentLanguage를 설정하면 i18n에서 설정한 나라의 언어파일에서 bookSearchConfig 값이 아래와 같이 되어있다.

1// hugo-book/i18n/ko.yaml
2- id: bookSearchConfig
3  translation: |
4    {
5      encode: false,
6      tokenize: function(str) {
7        return str.replace(/[\x00-\x7F]/g, '').split('');
8      }
9    }    

해결방법 (아직 미해결) #

커스텀 토크나이저 함수를 잘 보면 ascii 코드값을 전부 지워버리는것을 볼 수 있다. 아래 코드를 적용한 결과 한글검색어에서 첫번째 글자만 검색되는것을 확인할 수 있다. 정확히 파악 후 직접 구현해야될것같다.

1    {
2      encode: false,
3      tokenize: function(str) {
4        return str.split(/\W+/).concat(str.replace(/[\x00-\x7F]/g, '').split('')).filter(e => !!e)
5      }
6    }

관련 링크 #

comments powered by Disqus