
Быстрая, расширяемая и отдельная чистая поисковая система полной текстовой системы 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 ( ) ;Машинопись
Обратите внимание, что только экспорт по умолчанию доступен в TypeScript Node.js, так как модуль 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 и автономный) или thinker.min.mjs Использовать в качестве модуля UMD (отдельно, требуется и т. Д.)
< 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 для конструктора мыслителей.
// 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.
Если это включено, мыслитель будет использовать необработанные слова из введенных текстов, чтобы придать предложения, когда выражения не дает прямого совпадения.
Это то, на что будут выглядеть результаты.
Будет переименован, я обещаю.
Это сколько слов должно быть в выражении, прежде чем все слова станут необязательными. По умолчанию 1 (отключен).
Если вы установите это на 4 и ищите выражение из трех слов, все слова должны существовать в документе, чтобы соответствовать Match. На заднем плане what you want стало +what +you +want . Если вы выражаете экспрессию с четырьмя словами, все слова становятся необязательными как USUabl.
Когда это свойство будет установлено больше, чем одно, дополненные слова будут вставлены в индекс, состоящий из текущего и следующего слова. Если это свойство установлено на 3, а поле: «Я хочу cookie сегодня», поиск 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
дает 1,25 в коэффициенте усиления
Полевые процессоры - это функции, которые применяются к каждому полю, которым питается мыслитель, до того, как индексация будет выполнена.
Стрипты HTML, оставляя ссылки (a href = " ") и описания изображений (img alt = " ) в возвращаемом результате.
Пример настройки мыслителя со стандартным Ranker и HTML-стриптизмом
var
thinker = Thinker ( ) ,
ranker = Thinker . rankers . standard ( ) ,
stripHtml = Thinker . processors . stripHtml ( ) ;
thinker . addFieldProcessor ( stripHtml ) ;
thinker . ranker = ranker ; ТЕЛЕССОВЫЕ ПРОБРОСЫ - это функции, которые применяются к каждому слову, которым питается мыслитель. Они применяются одинаково как при индексации, так и при запросе.
Телемы обрабатываются так же, как они настроены, помните об этом при настройке вещей. Если вы, например, остановите слово перед применением WordForms, вам необходимо использовать слова STEMMED в списке 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 ;Удаляет слова, которые не дают лучшей точности, обычно такие, как «и», «я», «они», «мы», «могут». Добавление наиболее распространенных слов здесь может немного ускорить уравновешивание и сохранить немного оперативной памяти.
Пример настройки мыслителя со стандартным Рангом и остановить слова
var thinker = Thinker ( ) ,
ranker = Thinker . rankers . standard ( ) ,
stopwords = Thinker . processors . stopwords ( {
"artikel" : true ,
"bemötande" : true
} ) ;
thinker . addWordProcessor ( stopwords ) ;
thinker . ranker = ranker ;Находит стебель каждого слова, которое индексируется, «компьютеры» станут «компьютером», «организованный» станет «организацией» и т. Д. Это значительно повышает точность совпадений и взвешивания.
Дополнительная особенность стебля - составлять список слов, которые вы не хотите останавливаться.
В настоящее время доступно два ствола, шведские через пользовательскую версию алгоритма снежного кома и английский через алгоритм Портера.
Пример настройки мыслителя со стандартным Ranker, English Stemming и некоторыми остановками 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 ;Пример настройки мыслителя со стандартным Ранером, Шведским Ствол и Стоп Стоп Слова
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)
Шестигранник
PEHR BOMAN
Лицензирована по лицензии MIT