js-search를 기반으로 하지만 더 나은 성능을 위해 웹 작업자 지원이 추가된 전체 텍스트 클라이언트 측 검색입니다.
통합 예시는 redux-search를 확인하세요.
또는 NPM을 사용하여 직접 설치하세요.
npm install --save js-worker-search
JS 검색에서 분기된 이 유틸리티는 검색 색인을 구축하고 실제 검색을 실행합니다. 현재 환경(브라우저 또는 노드)의 기능을 자동으로 감지하고 가능한 경우 웹 작업자 기반 구현을 사용합니다. 웹 작업자 지원을 사용할 수 없는 경우 기본(UI) 스레드에서 검색이 수행됩니다.
SearchApi는 다음 공개 메서드를 정의합니다.
constructor ({ caseSensitive, indexMode, tokenizePattern })
기본적으로 SearchApi
모든 하위 문자열과 일치하는 인덱스를 작성합니다. 명명된 indexMode
매개변수를 전달하여 이 동작을 재정의할 수 있습니다. 유효한 값은 INDEX_MODES.ALL_SUBSTRINGS
, INDEX_MODES.EXACT_WORDS
및 INDEX_MODES.PREFIXES
입니다.
검색은 기본적으로 대소문자를 구분하지 않으며 모든 공백 문자로 분할됩니다. 기본 옵션 사용자 정의에 대한 자세한 내용은 아래를 읽어보세요.
indexDocument (uid, text)
검색 색인에 uid를 추가하거나 업데이트하고 이를 지정된 텍스트와 연결합니다. 현재 uid는 인덱스에 추가하거나 업데이트할 수만 있고 제거할 수는 없습니다.
매개변수:
search(query)
지정된 쿼리 텍스트에 대한 현재 인덱스를 검색합니다. 텍스트 내의 모든 단어와 일치하는 UID만 허용됩니다. 빈 쿼리 문자열이 제공되면 색인화된 모든 uid가 반환됩니다.
문서 검색은 대소문자를 구분하지 않습니다(예: "search"는 "Search"와 일치함). 문서 검색에서는 부분 문자열 일치를 사용합니다(예: "na"와 "me"는 모두 "name"과 일치합니다).
매개변수:
이 메소드는 uid 배열을 반환합니다.
terminate()
웹 작업자에서 검색이 실행 중인 경우 가비지 수집을 허용하기 위해 작업자가 종료됩니다.
다음과 같이 API를 사용하십시오.
import SearchApi from 'js-worker-search'
const searchApi = new SearchApi ( )
// Index as many objects as you want.
// Objects are identified by an id (the first parameter).
// Each Object can be indexed multiple times (once per string of related text).
searchApi . indexDocument ( 'foo' , 'Text describing an Object identified as "foo"' )
searchApi . indexDocument ( 'bar' , 'Text describing an Object identified as "bar"' )
// Search for matching documents using the `search` method.
// In this case the promise will be resolved with the Array ['foo', 'bar'].
// This is because the word "describing" appears in both indices.
const promise = searchApi . search ( 'describing' )
기본적으로 SearchApi
모든 하위 문자열과 일치하는 인덱스를 작성합니다. 다음과 같이 indexMode
매개변수를 생성자에 전달하여 이 동작을 재정의할 수 있습니다.
import SearchApi , { INDEX_MODES } from 'js-worker-search'
// all-substrings match by default; same as current
// eg "c", "ca", "a", "at", "cat" match "cat"
const searchApi = new SearchApi ( )
// prefix matching (eg "c", "ca", "cat" match "cat")
const searchApi = new SearchApi ( {
indexMode : INDEX_MODES . PREFIXES
} )
// exact words matching (eg only "cat" matches "cat")
const searchApi = new SearchApi ( {
indexMode : INDEX_MODES . EXACT_WORDS
} )
기본적으로 SearchApi
공백과 줄 바꿈을 구분 문자로 사용하여 텍스트를 단어로 나눕니다(토큰화). 자신만의 분할 규칙을 제공하려면 다음과 같이 패턴을 정의하는 생성자에 RegExp를 전달하세요.
// Custom tokenizer pattern to include all non alphanumerics as delimeters
// ex: searching "Swift" matches "Thomas Swift" and "Thomas (Swift)" but not "swiftly tilting"
const searchApi = new SearchApi ( {
indexMode : INDEX_MODES . EXACT_WORDS ,
tokenizePattern : / [^a-z0-9]+ / ,
} )
기본 새니타이저는 대소문자를 구분하지 않고 검색을 수행합니다. 해당 동작을 재정의하고 대소문자를 구분하여 검색하려면 다음과 같이 caseSensitive 비트를 true로 설정하세요.
// custom sanitizer for case-sensitive searches
const searchApi = new SearchApi ( {
caseSensitive : true
} )
기본적으로 검색 유틸리티는 모든 검색 토큰이 포함된 문서만 반환합니다. 검색 토큰이 포함된 문서를 반환하도록 구성할 수 있습니다.
// Change search behavior from AND to OR
const searchApi = new SearchApi ( {
matchAnyToken : true
} )
변경 사항은 변경 로그에서 추적됩니다.
js-worker-search는 MIT 라이선스에 따라 사용할 수 있습니다.