
快速,扩展和独立的纯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许可证许可