[javascript] Fuse.js에서 사용되는 검색 알고리즘

Fuse.js는 JavaScript에서 텍스트 검색을 위한 강력한 라이브러리입니다. 이 라이브러리는 다양한 검색 알고리즘을 사용하여 효율적이고 정확한 검색을 제공합니다. Fuse.js에서 주로 사용되는 검색 알고리즘 몇 가지를 살펴보겠습니다.

1. Bitap 알고리즘

Bitap 알고리즘은 패턴 매칭에 사용되는 알고리즘으로, 이진 비트 연산을 통해 효율적으로 매칭을 수행합니다. 이 알고리즘은 텍스트 내에서 패턴을 찾고자 할 때 사용됩니다. 유사한 패턴을 찾을 때 유용하게 사용될 수 있습니다.

예시 코드

const pattern = 'hello';
const text = 'hello world';

const bitap = new Fuse(text, {
  includeMatches: true,
  keys: ['name'],
  threshold: 0.6,
  shouldSort: true,
  minMatchCharLength: 3,
  location: 0,
  distance: 100,
  useExtendedSearch: true,
  ignoreLocation: true,
  findAllMatches: false,
  tokenize: false,
  matchAllTokens: false,
  findAllTokens: false,
  includeScore: false,
  sortFn: null,
  getFn: getValue,
  keysLookup: null,
  verbose: false,
  pattern
});

console.log(bitap.search(pattern));

2. Extended 이진 트리 검색

Extended 이진 트리 검색 알고리즘은 효율적인 이진 트리 검색을 수행하는 알고리즘입니다. 이 알고리즘은 주로 텍스트의 일부분이나 단어의 일부분을 검색할 때 사용됩니다. 이진 트리의 리프 노드를 통해 검색을 수행하며, 정확한 매칭이 아니라 근사 매칭을 찾는 데 사용될 수 있습니다.

예시 코드

const pattern = 'hel';
const text = 'hello world';

const extendedSearch = new Fuse(text, {
  includeMatches: true,
  keys: ['name'],
  threshold: 0.6,
  shouldSort: true,
  minMatchCharLength: 3,
  location: 0,
  distance: 100,
  useExtendedSearch: true,
  ignoreLocation: true,
  findAllMatches: false,
  tokenize: false,
  matchAllTokens: false,
  findAllTokens: false,
  includeScore: false,
  sortFn: null,
  getFn: getValue,
  keysLookup: null,
  verbose: false,
  pattern
});

console.log(extendedSearch.search(pattern));

3. Fuzzy 검색

Fuzzy 검색 알고리즘은 텍스트 검색에 높은 유연성을 제공하는 알고리즘입니다. 이 알고리즘은 입력된 패턴과 목표 텍스트를 비교하여 유사성 점수를 계산합니다. 이 알고리즘은 오타나 철자 오류가 있는 텍스트를 검색하거나, 텍스트의 일부를 찾는 데 사용될 수 있습니다.

예시 코드

const pattern = 'helo';
const text = 'hello world';

const fuzzySearch = new Fuse(text, {
  includeMatches: true,
  keys: ['name'],
  threshold: 0.6,
  shouldSort: true,
  minMatchCharLength: 3,
  location: 0,
  distance: 100,
  useExtendedSearch: true,
  ignoreLocation: true,
  findAllMatches: false,
  tokenize: false,
  matchAllTokens: false,
  findAllTokens: false,
  includeScore: false,
  sortFn: null,
  getFn: getValue,
  keysLookup: null,
  verbose: false,
  pattern
});

console.log(fuzzySearch.search(pattern));

위에서는 Fuse.js를 사용한 Bitap, Extended 이진 트리 검색, Fuzzy 검색 알고리즘을 간단한 예제 코드와 함께 살펴보았습니다. 이러한 알고리즘은 Fuse.js의 검색 성능을 향상시키고 다양한 텍스트 검색 요구사항을 처리할 수 있도록 도와줍니다.

더 자세한 내용은 Fuse.js의 공식 문서를 참조해주세요.

참고 자료