전체 속도 측면에서 BulkSearch는 모든 검색 라이브러리보다 성능이 뛰어나며 다중 단어 일치, 음성 변환 또는 부분 일치와 같은 유연한 검색 기능도 제공합니다. 이는 본질적으로 HDD가 파일 시스템에서 파일을 관리하는 방법을 기반으로 합니다. 항목 추가, 업데이트 또는 제거는 항목을 검색하는 것만큼 빠르지만 추가 메모리도 소비합니다. 색인을 자주 업데이트할 필요가 없다면 FlexSearch가 더 나은 선택일 수 있습니다. BulkSearch는 또한 백그라운드에서 쿼리를 수행하기 위한 비동기 처리 모델을 제공합니다.
기준:
지원되는 플랫폼:
지원되는 모듈 정의:
모든 기능:
< html >
< head >
< script src =" js/bulksearch.min.js " > </ script >
</ head >
...
참고: 프로덕션에는 bulksearch.min.js를 사용하고 개발에는 bulksearch.js를 사용하세요.
CDN의 최신 버전 사용:
< script src =" https://cdn.rawgit.com/nextapps-de/bulksearch/master/bulksearch.min.js " > </ script >
npm install bulksearch
코드에 다음을 포함합니다.
var BulkSearch = require ( "bulksearch" ) ;
또는 다음이 필요할 경우 옵션을 전달하세요.
var index = require ( "bulksearch" ) . create ( { /* options */ } ) ;
AMD
var BulkSearch = require ( "./bulksearch.js" ) ;
설명 | 대량검색 | FlexSearch |
---|---|---|
입장 | 읽기-쓰기 최적화 인덱스 | 읽기 메모리 최적화 인덱스 |
메모리 | 대형(단어당 ~ 90바이트) | 매우 작음(단어당 ~ 2바이트) |
용법 |
|
|
결과 제한 | 예 | 예 |
쪽수 매기기 | 예 | 아니요 |
전역 방법:
색인 방법:
대량 검색. 생성(<옵션>)
var index = new BulkSearch ( ) ;
또는 다음을 사용할 수도 있습니다.
var index = BulkSearch . create ( ) ;
var index = new BulkSearch ( {
// default values:
type : "integer" ,
encode : "icase" ,
boolean : "and" ,
size : 4000 ,
multi : false ,
strict : false ,
ordered : false ,
paging : false ,
async : false ,
cache : false
} ) ;
더 읽어보기: 음성 검색, 음성 비교, 메모리 사용 개선
색인. 추가(ID, 문자열)
index . add ( 10025 , "John Doe" ) ;
색인. 검색(문자열|옵션, <제한|페이지>, <콜백>)
index . search ( "John" ) ;
결과를 제한하십시오.
index . search ( "John" , 10 ) ;
쿼리를 비동기식으로 수행합니다.
index . search ( "John" , function ( result ) {
// array of results
} ) ;
매개변수를 객체로 전달합니다.
index . search ( {
query : "John" ,
page : '1:1234' ,
limit : 10 ,
callback : function ( result ) {
// async
}
} ) ;
색인. 업데이트(ID, 문자열)
index . update ( 10025 , "Road Runner" ) ;
색인. 제거(ID)
index . remove ( 10025 ) ;
index . reset ( ) ;
index . destroy ( ) ;
색인. 초기화(<옵션>)
참고: 다시 초기화하면 이전 인덱스도 삭제됩니다!
초기화(동일한 옵션 사용):
index . init ( ) ;
새로운 옵션으로 초기화:
index . init ( {
/* options */
} ) ;
대량 검색. addMatcher({ REGEX: 교체 })
모든 인스턴스에 전역 일치자를 추가합니다.
BulkSearch . addMatcher ( {
'ä' : 'a' , // replaces all 'ä' to 'a'
'ó' : 'o' ,
'[ûúù]' : 'u' // replaces multiple
} ) ;
특정 인스턴스에 대한 비공개 일치자를 추가합니다.
index . addMatcher ( {
'ä' : 'a' , // replaces all 'ä' to 'a'
'ó' : 'o' ,
'[ûúù]' : 'u' // replaces multiple
} ) ;
생성/초기화 중에 비공개 사용자 지정 인코더를 정의합니다.
var index = new BulkSearch ( {
encode : function ( str ) {
// do something with str ...
return str ;
}
} ) ;
대량 검색. 레지스터(이름, 인코더)
BulkSearch . register ( 'whitespace' , function ( str ) {
return str . replace ( / / g , '' ) ;
} ) ;
전역 인코더 사용:
var index = new BulkSearch ( { encode : 'whitespace' } ) ;
프라이빗 인코더:
var encoded = index . encode ( "sample text" ) ;
글로벌 인코더:
var encoded = BulkSearch . encode ( "whitespace" , "sample text" ) ;
BulkSearch . register ( 'mixed' , function ( str ) {
str = this . encode ( "icase" , str ) ; // built-in
str = this . encode ( "whitespace" , str ) ; // custom
return str ;
} ) ;
BulkSearch . register ( 'extended' , function ( str ) {
str = this . encode ( "custom" , str ) ;
// do something additional with str ...
return str ;
} ) ;
index . info ( ) ;
인덱스에 대한 정보를 반환합니다. 예:
{
"bytes" : 103600 ,
"chunks" : 9 ,
"fragmentation" : 0 ,
"fragments" : 0 ,
"id" : 0 ,
"length" : 7798 ,
"matchers" : 0 ,
"size" : 10000 ,
"status" : false
}
참고: 조각화 값이 약 50% 이상인 경우 cleanup() 사용을 고려해야 합니다.
인덱스 최적화는 조각화된 모든 메모리를 해제하고 점수를 매겨 인덱스를 다시 작성합니다.
index . optimize ( ) ;
참고: 페이지 매김을 사용하면 쿼리 시간을 100분의 1로 줄일 수 있습니다.
초기화 시 페이지 매김을 활성화합니다.
var index = BulkSearch . create ( { paging : true } ) ;
쿼리를 수행하고 한도(페이지당 항목 수)를 전달합니다.
index . search ( "John" , 10 ) ;
응답에는 다음과 같은 페이지 매기기 개체가 포함됩니다.
{
"current" : " 0:0 " ,
"prev" : null ,
"next" : " 1:16322 " ,
"results" : []
}
설명:
"현재의" | 현재 페이지에 대한 포인터를 포함합니다. |
"이전" | 이전 페이지에 대한 포인터를 포함합니다. 이 필드의 값이 null 이면 더 이상 이전 페이지를 사용할 수 없습니다. |
"다음" | 다음 페이지에 대한 포인터를 포함합니다. 이 필드에 null 값이 있을 때마다 더 이상 페이지가 남지 않습니다. |
"결과" | 일치하는 항목의 배열입니다. |
쿼리를 수행하고 특정 페이지에 대한 포인터를 전달합니다.
index . search ( "John" , {
page : "1:16322" , // pointer
limit : 10
} ) ;
옵션 | 가치 | 설명 |
---|---|---|
유형 | "바이트" "짧은" "정수" "뜨다" "끈" | 전달된 ID의 데이터 유형은 생성 시 지정되어야 합니다. 여기서는 가능한 가장 낮은 데이터 범위를 사용하는 것이 좋습니다. 예를 들어 ID가 65,535보다 높지 않은 경우 "short"를 사용합니다. |
인코딩하다 | 거짓 "아이케이스" "단순한" "고급의" "추가의" 함수(문자열):문자열 | 인코딩 유형입니다. 내장된 기능 중 하나를 선택하거나 사용자 정의 인코딩 기능을 전달하세요. |
부울 | "그리고" "또는" | 여러 단어를 비교할 때 적용된 부울 모델입니다. 참고: "or"를 사용하면 첫 번째 단어도 "and"와 비교됩니다. 예: 3개 단어가 포함된 쿼리의 결과는 일치하는 단어 1 및 2와 일치하는 단어 1 및 3입니다. |
크기 | 2500 - 10000 | 청크의 크기. 어떤 값이 가장 적합한지는 콘텐츠 길이에 따라 다릅니다. 짧은 콘텐츠 길이(예: 사용자 이름)는 청크 크기가 2,500이면 더 빠릅니다. 청크 크기가 10,000이면 더 큰 텍스트가 더 빠르게 실행됩니다. 참고: 조각화를 방지하기 위해 인덱싱해야 하는 최대 콘텐츠 길이 중 최소 청크 크기를 사용하는 것이 좋습니다. |
멀티 | 진실 거짓 | 다중 워드 프로세싱을 활성화합니다. |
주문하다 | 진실 거짓 | 여러 단어는 일치하는 항목과 순서가 동일해야 합니다. |
엄격한 | 진실 거짓 | 일치 항목은 정확히 쿼리로 시작되어야 합니다. |
은닉처 | 진실 거짓 | 캐싱을 활성화합니다. |
인코더 | 설명 | 거짓 긍정 | 압축 수준 |
---|---|---|---|
거짓 | 인코딩 끄기 | 아니요 | 아니요 |
"아이케이스" | 대소문자를 구분하지 않는 인코딩 | 아니요 | 아니요 |
"단순한" | 음성 정규화 | 아니요 | ~ 3% |
"고급의" | 음성 정규화 + 리터럴 변환 | 아니요 | ~ 25% |
"추가의" | 음성 정규화 + Soundex 변환 | 예 | ~ 50% |
참조 문자열: "Björn-Phillipp Mayer"
질문 | 탄력적 검색 | 대량 검색(iCase) | 대량검색(간단) | 대량 검색(고급) | 대량 검색(추가) |
---|---|---|---|---|---|
비요른 | 예 | 예 | 예 | 예 | 예 |
비요르 | 아니요 | 예 | 예 | 예 | 예 |
비요른 | 아니요 | 아니요 | 예 | 예 | 예 |
비욘 | 아니요 | 아니요 | 아니요 | 예 | 예 |
필립 | 아니요 | 아니요 | 아니요 | 예 | 예 |
필립 | 아니요 | 아니요 | 아니요 | 예 | 예 |
비요른필립 | 아니요 | 아니요 | 예 | 예 | 예 |
마이어 | 아니요 | 아니요 | 아니요 | 예 | 예 |
비욘 마이어 | 아니요 | 아니요 | 아니요 | 예 | 예 |
마이어 필립 | 아니요 | 아니요 | 아니요 | 예 | 예 |
바이른 메이어 | 아니요 | 아니요 | 아니요 | 아니요 | 예 |
(오탐) | 예 | 아니요 | 아니요 | 아니요 | 예 |
참고: 전달된 ID의 데이터 유형은 생성 시 지정되어야 합니다. 여기서는 가능한 가장 낮은 데이터 범위를 사용하는 것이 좋습니다. 예를 들어 ID가 65,535보다 높지 않은 경우 "short"를 사용합니다.
ID 유형 | 값의 범위 | 색인된 단어 ~ 100,000개마다 메모리 사용량 |
---|---|---|
바이트 | 0 - 255 | 4.5MB |
짧은 | 0 - 65,535 | 5.3MB |
정수 | 0 - 4,294,967,295 | 6.8MB |
뜨다 | 0 - * (16자리) | 10MB |
끈 | * (무제한) | 28.2MB |
작성자 대량 검색: Thomas Wilkerling
라이센스: 아파치 2.0 라이센스