
快速,擴展和獨立的純JavaScript全文搜索引擎。節點。丹諾。瀏覽器。
npm install thinker-fts --save
JavaScript ESM
import Thinker from "thinker-fts" ;
const thinker = Thinker ( ) ;JavaScript commonjs
const Thinker = require ( "thinker-fts" ) ;
const thinker = Thinker ( ) ;打字稿
請注意,在Node.js typeScript中僅可用默認導出,因為內部使用了commonjs模塊。
import Thinker from "thinker-fts" ;
const thinker = Thinker ( ) ;JavaScript
import Thinker from "https://cdn.jsdelivr.net/gh/hexagon/thinker-fts@2/dist/thinker.min.mjs" ;
const thinker = Thinker ( ) ;或者
import Thinker from "https://deno.land/x/thinker/dist/thinker.min.mjs" ;
const thinker = Thinker ( ) ;thinker.min.js (umd和standalone)或thinker.min.mjs (es-module) 用作UMD模塊(單獨使用,requirejs等)
< script src =" https://cdn.jsdelivr.net/npm/thinker-fts/dist/thinker.min.js " > </ script >用作ES模塊
< script type =" module " >
import Thinker from "https://cdn.jsdelivr.net/npm/thinker-fts/dist/thinker.min.mjs" ;
const thinker = Thinker ( ) ;
// ... see usage section ...
</ script > 一個簡單的帶有餵食和搜索的設置,看起來像下面的摘要
// See installation section for exact procedure depending on environment, this is Node.js/CommonJS
const Thinker = require ( 'thinker-fts' ) ,
const thinker = Thinker ( ) ;
// Connect standard ranker
thinker . ranker = Thinker . rankers . standard ( ) ;
// Feed thinker with an array of documents formatted like { id: id, fields: [textfield, textfield] }
thinker . feed ( [
{ id : 1 , fields : [ 'Lorem' , 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.' ] } ,
{ id : 2 , fields : [ 'Ipsum' , 'Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.' ] }
] ) ;
// Search for text
var result = thinker . find ( 'ut in' ) ;
// Show result
console . log ( result ) ;結果:
{
expressions: [
{
original: 'ut',
interpretation: [Object],
suggestion: undefined,
modifier: undefined,
exactMode: false
},
{
original: 'in',
interpretation: [Object],
suggestion: undefined,
modifier: undefined,
exactMode: false
}
],
performance: {
find: 1.107075,
rank: 0.598558,
sort: 0.688598,
filter: 0.060182,
total: 2.639159
},
documents: [
{ id: 2, weight: 1.5, expressions: [Object] },
{ id: 1, weight: 1.5, expressions: [Object] }
],
totalHits: 2,
returnedHits: 2
}
請不要說您必須連接排名者,否則發現不會提供結果集。排名構建結果集。
思想家通過向思想家構造函數提供選項對象來覆蓋默認配置。
// Options only available at initialization
var thinker = Thinker ( {
characters : / ([a-zA-Z0-9]*) / g ,
caseSensitive : false ,
minWildcardWordLen : 3 ,
maxWildcardWordLen : 32 ,
minWordLen : 2 ,
maxWordLen : 32 ,
suggestionMinWordCount : 6 ,
enableSuggestions : false ,
optionalPlusFromExpressions : 1 ,
concatenateWords : 1
} ) ;常規表明說明哪些字符是單詞,如果您(例如)想使用具有瑞典字符的思想家
{ characters : / ([a-zA-Z0-9åäöÅÄÖ]*) / g }自我解釋,真或錯誤
思想家總是進行部分匹配,MinwildCardWordlen設置了應該索引的單詞的簡短部分。默認設置為4,與“ xpre”與“表達式”相匹配,而不是“ pre”。設置這太短可能會帶來不全面的偽造匹配,如果與重型排名一起使用,可能會影響性能。
與上面相同,但最大。
索引的最短詞是默認值2,它在索引中添加了“ EX”,但不是“ e”
與上面相同,但最大。
將必須在索引中存在多少次以用於建議。默認為6。
如果啟用了此功能,當思想家將使用未經處理的文本中未經處理的單詞在表達式不直接匹配時提供建議。
這就是結果。表達[n]在您搜索“外流”(缺少P)時將看起來像
我保證會更名。
這就是表達式中應該有多少個單詞,然後所有單詞成為可選。默認為1(禁用)。
如果將其設置為4,然後搜索三個單詞表達式,則文檔中都需要存在所有單詞以進行giva e匹配。在背景中what you want +what +you +want 。如果您將四個單詞的表達式贈予,則所有單詞都將成為可選的用途。
當將此屬性設置為大於一個時,增強詞將插入索引中,包括當前和下一個單詞。如果此屬性設置為3,並且該字段為“我今天想要cookies”,則搜索iwantcookies , wantcookiestoday或wantcookies將提供匹配。
{
interpretation : {
original : 'expression' ,
...
} ,
...
suggestion : 'expression' ,
...
} 通過將選項對像傳遞給其構造函數來配置排名者。
var thinker = Thinker ( ) ,
ranker = Thinker . rankers . standard ( {
directHit : 1 ,
partialHit : 0.5 ,
eachPartialExpressionFactor : 1.5 ,
eachDirectExpressionFactor : 2 ,
fields : {
1 : { weight : 4 , boostPercentage : false } ,
2 : { weight : 2 , boostPercentage : false }
}
} ) ;
thinker . ranker = ranker ;當表達式與單詞直接響應時,重量為重量。部分
當表達式給出部分匹配時,將其應用於文檔的總重量。如果查詢由三個表達式組成,所有這些都部分匹配該因子將應用三次。
與上面相同,但直接命中。
在文檔的每個字段中定義不同基本重量的對象,如果您的文檔看起來像
var docs = [
{ id : 1 , fields : [ "This is the title" , "This is the ingress" , "This is the text" ] } ,
...
] ;而且您的田地重量看起來像
fields: {
0 : { weight : 4 , boostPercentage : true } ,
1 : { weight : 2 , boostPercentage : false } ,
2 : { weight : 2 , boostPercentage : false }
}標題字段中的比賽將獲得四個重量,入口場中的比賽將獲得兩個等等。
此外,由於boostpercentage設置為標題為True,如果比賽是標題中唯一的單詞,則重量可以達到兩倍。
例如,如果標題是“這是東西”,而我們搜索“東西”,則基本重量為四個,並且乘以計算的因子
1個字匹配,完全4個單詞
1+1/4
1+0.25
在Boostpercentage係數中給出1.25
現場處理器是在完成索引之前,應用於思想家所供給的每個字段的功能。
剝離html,在返回的結果中留下鏈接(a href =“ ”)和圖像描述(img alt =“ ”)。
示例設置標準排名和HTML-Stripping的思想家
var
thinker = Thinker ( ) ,
ranker = Thinker . rankers . standard ( ) ,
stripHtml = Thinker . processors . stripHtml ( ) ;
thinker . addFieldProcessor ( stripHtml ) ;
thinker . ranker = ranker ; 文字處理器是應用於思想家所餵養的每個單詞的函數。它們在索引和查詢時都以相同的方式應用它們。
文字處理器的處理方式與配置的方式相同,在設置內容時請記住這一點。例如,如果您在應用Wordforms之前先驅動單詞,則需要在Wordforms列表中使用詞幹單詞。
與他人替換選擇的單詞,有效地使同義詞相互平等。
用標準排名和詞法設置思想家的示例
var thinker = Thinker ( ) ,
ranker = Thinker . rankers . standard ( ) ,
wordforms = Thinker . processors . wordforms ( {
"we" : "us" ,
"they" : "them" ,
"github" : "repository"
} ) ;
thinker . addWordProcessor ( wordforms ) ;
thinker . ranker = ranker ;刪除不會給出更好精度的單詞,通常是“和”,“ i”,“他們”,“我們”,','can'。在這裡添加最常見的單詞可以加快Quries的速度,並節省一些RAM。
用標準排名和停止單詞設置思想家的示例
var thinker = Thinker ( ) ,
ranker = Thinker . rankers . standard ( ) ,
stopwords = Thinker . processors . stopwords ( {
"artikel" : true ,
"bemötande" : true
} ) ;
thinker . addWordProcessor ( stopwords ) ;
thinker . ranker = ranker ;找到索引的每個單詞的詞幹,“計算機”將成為“計算機”,“有組織的”將變成“組織”等。這極大地提高了比賽和加權的準確性。
Stemmers的一個可選功能是提供您不想阻止的單詞列表。
目前,有兩個詞幹,通過雪球算法的自定義版本以及通過搬運工算法的英語提供了瑞典語。
用標準排名者,英語詞乾和一些stemmer停止詞來設置思想家。
var
thinker = Thinker ( ) ,
ranker = Thinker . rankers . standard ( ) ,
stemmer = Thinker . processors . stemmers . english ( {
"stemmer" : true ,
"stemming" : true ,
"dontstemthiseither" : true ,
"leonardo" : true ,
"anders" , true
} ) ;
thinker . addWordProcessor ( stemmer ) ;
thinker . ranker = ranker ;用標準排名者,瑞典詞乾和Stemmer停止單詞設置思想家的示例
var
thinker = Thinker ( ) ,
ranker = Thinker . rankers . standard ( ) ,
stemmer = Thinker . processors . stemmers . swedish ( {
"berta" : true ,
"jonas" : true ,
"leonardo" : true ,
"anders" : true
} ) ;
thinker . addWordProcessor ( stemmer ) ;
thinker . ranker = ranker ;Soundex以這樣的方式預處理單詞,聽起來相似的單詞相互匹配。
用Soundex處理設置思想家的示例。
var
thinker = Thinker ( ) ,
ranker = Thinker . rankers . standard ( ) ,
soundex = Thinker . processors . soundex ( ) ;
thinker . addWordProcessor ( soundex ) ;
thinker . ranker = ranker ; 注意:對於正常使用,所有需要的依賴項都是捆綁的
Fast-Levenshtein(https://github.com/hiddentao/fast-levenshtein)
Stemmer(https://github.com/wooorm/stemmer)
node-soundex(https://github.com/louist/node-soundex)
摩卡(https://github.com/mochajs/mocha)
應該(https://github.com/shouldjs/should.js)
六邊形
Pehr Boman
根據MIT許可證許可