
高速で拡張可能で、スタンドアロンの純粋なJavaScriptフルテキスト検索エンジン。ノード。デノ。ブラウザ。
npm install thinker-fts --save
JavaScriptESM
import Thinker from "thinker-fts" ;
const thinker = Thinker ( ) ;JavaScript commonjs
const Thinker = require ( "thinker-fts" ) ;
const thinker = Thinker ( ) ;タイプスクリプト
CommonJSモジュールは内部で使用されるため、デフォルトのエクスポートのみがnode.js typescriptで利用可能であることに注意してください。
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 and standalone)またはthinker.min.mjs (es-module) UMDモジュールとして使用する(スタンドアロン、要求Jなど)
< 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 Objectを思想家コンストラクターに提供することによりオーバーライドされます。
// 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は、インデックスを作成する必要がある単語の短い部分を設定します。デフォルトの設定は、「XPRE」と「式」に一致するが、「pre」ではなく4です。これを短く設定しすぎると、無意識の量の偽の一致が得られる可能性があり、重いランカーで使用するとパフォーマンスに影響を与える可能性があります。
上記と同じですが、最大。
インデックスの最短の単語、デフォルトは2で、「EX」をインデックスに追加しますが、「E」ではありません。
上記と同じですが、最大。
提案に使用するために、インデックスに単語が存在する必要がある回数を設定します。デフォルトは6になります。
これが有効になっている場合、思想家は、入力されたテキストから未処理の単語を使用して、式が直接一致しない場合に提案を行います。
これが結果です。Expressions[n]は、「Exression」を検索するときのように見えます(p)
改名されます、私は約束します。
これは、すべての単語がオプションになる前に、表現にいくつの単語があるべきかです。デフォルトは1(無効)です。
これを4に設定し、3つの単語式を検索すると、すべての単語がドキュメントに存在する必要があります。背景にwhat you want +what +you +wantなりたいです。 4語の表現をgivaすると、すべての単語がusuablとしてオプションになります。
このプロパティが1つ以上に設定されると、現在および次の単語で構成される拡張単語がインデックスに挿入されます。このプロパティが3に設定されていて、フィールドが「今日はクッキーが欲しい」の場合、 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 ;式が単語に直接一致する場合、重量を要素します。部分的に
式が部分的な一致を与えるときに、ドキュメントに適用される因子。クエリがすべての部分的に一致する3つの式で構成されている場合、この係数は3回適用されます。
上記と同じですが、直接ヒットします。
ドキュメントの次のように見える場合、ドキュメントの各フィールドで一致する別の基本重量を定義するオブジェクト
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 }
}タイトルフィールドの一致は4つの重量になり、イングレスフィールドでの一致は2つなどの重量になります。
さらに、Boostpercentageがタイトルに合わせて設定されているため、試合がタイトルの唯一の単語である場合、その重量は2倍になります。
たとえば、タイトルが「これがもの」であり、「もの」を検索する場合、基本重量は4で、それに計算された係数が掛けられます
1つの単語が一致し、4つの単語が完全に
1+1/4
1+0.25
Boostpercentage係数で1.25を与えます
フィールドプロセッサは、インデックスが完了する前に、思想家が供給されるすべてのフィールドに適用される関数です。
htmlをストリップし、返された結果にリンク(href = " ")と画像の説明(img alt = " ")を残します。
Standard RankerとHTMLストリッピングでThinkerを設定する例
var
thinker = Thinker ( ) ,
ranker = Thinker . rankers . standard ( ) ,
stripHtml = Thinker . processors . stripHtml ( ) ;
thinker . addFieldProcessor ( stripHtml ) ;
thinker . ranker = ranker ; ワードプロセッサは、思想家が供給されるすべての単語に適用される関数です。それらは、インデックス作成時とクエリの場合と同じように適用されます。
ワードプロセッサは構成されているのと同じ方法で処理されます。これは、物事をセットアップするときに留意してください。たとえば、ワードフォームを適用する前に単語を語る場合は、WordFormsリストに茎のある単語を使用する必要があります。
選択した単語を他の人に置き換え、効果的に同義語を互いに等しくする。
標準的なランカーとワードフォームで思想家のセットアップの例
var thinker = Thinker ( ) ,
ranker = Thinker . rankers . standard ( ) ,
wordforms = Thinker . processors . wordforms ( {
"we" : "us" ,
"they" : "them" ,
"github" : "repository"
} ) ;
thinker . addWordProcessor ( wordforms ) ;
thinker . ranker = ranker ;より良い精度を与えない単語を削除します。通常は「and」、「私」、「彼ら」、「私たち」、「can」のようなものを削除します。ここで最も一般的な単語を追加すると、クリーズを少しスピードアップし、RAMを節約できます。
標準ランカーと停止単語で思想家を設定する例
var thinker = Thinker ( ) ,
ranker = Thinker . rankers . standard ( ) ,
stopwords = Thinker . processors . stopwords ( {
"artikel" : true ,
"bemötande" : true
} ) ;
thinker . addWordProcessor ( stopwords ) ;
thinker . ranker = ranker ;インデックス化された各単語のステムを見つけ、「コンピューター」は「コンピューター」になり、「編成された」は「編成」などになります。これにより、一致と重み付けの精度が大幅に向上します。
ステマーのオプションの機能は、茎を落としたくない単語のリストを提供することです。
現在、スウェーデンのスノーボールアルゴリズムのカスタムバージョンを介してスウェーデン語、ポーターアルゴリズムを介して英語を使用できる2つのステマーが利用可能です。
標準的なランカー、英語の幹、いくつかのステムマーストップワードで思想家を設定する例。
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 ;標準的なランカー、スウェーデンの幹、およびステムマーストップワードで思想家を設定する例
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)
Mocha(https://github.com/mochajs/mocha)
(https://github.com/shouldjs/should.js)
六角形
ペール・ボーマン
MITライセンスに基づいてライセンスされています