Solr Fuzzy Suggester und Solr Infix Suggester über Ajax

Ilustracija
Опис пројекта
За ефикасну претрагу на веб-сајту важно је да корисници брзо и једноставно пронађу одговарајуће резултате. Solr Fuzzy Suggester и Solr Infix Suggester нуде ефикасно рјешење за то. Они се могу позивати и филтрирати преко Ajax упита.
Активирање suggester-а врши се преко XML компоненте SuggestComponent у датотеци solrconfig.xml, као што показује сљедећи примјер кода:
<searchComponent name="suggest" class="solr.SuggestComponent">
<lst name="suggester">
<str name="name">mySuggester</str>
<str name="lookupImpl">FuzzyLookupFactory</str>
<str name="dictionaryImpl">DocumentDictionaryFactory</str>
<str name="field">suggest_field</str>
<str name="weightField">weight</str>
<str name="suggestAnalyzerFieldType">text_general</str>
<str name="buildOnStartup">true</str>
</lst>
</searchComponent>
Коришћењем Solr Fuzzy Suggester и Solr Infix Suggester-а, корисници могу брзо и једноставно добити релевантне резултате, јер добијају приједлоге и функције аутоматског довршавања. Резултати упита се затим могу филтрирати како би се осигурало да се приказују само најрелевантнији резултати.
Примјеном ових технологија веб-сајтови могу понудити побољшану функционалност претраге и боље корисничко искуство.
Примјер конфигурације (Syntax Highlighter)
<searchComponent name="suggest" class="solr.SuggestComponent">
<lst name="suggester">
<str name="name">mySuggester</str>
<str name="lookupImpl">FuzzyLookupFactory</str>
<str name="dictionaryImpl">DocumentDictionaryFactory</str>
<str name="field">cat</str>
<str name="weightField">price</str>
<str name="suggestAnalyzerFieldType">string</str>
<str name="buildOnStartup">false</str>
</lst>
</searchComponent>
Слика показује шта suggester ради: унос не даје тачан погодак, а Solr Suggester враћа сличне приједлоге. Постоји више начина да се одреди сличност ниски (string). Овдје ћу поменути два.
1) Fuzzy (Левенштајн/Levenshtein дистанца)
Прва могућност је fuzzy, који се заснива на алгоритму Левенштајнове дистанце (Levenshtein distance).
У JavaScript-у би то изгледало овако:
function levenshtein(a, b) {
var t = [], u, i, j, m = a.length, n = b.length;
if (!m) { return n; }
if (!n) { return m; }
for (j = 0; j <= n; j++) { t[j] = j; }
for (i = 1; i <= m; i++) {
for (u = [i], j = 1; j <= n; j++) {
u[j] = a[i - 1] === b[j - 1] ? t[j - 1] : Math.min(t[j - 1], t[j], u[j - 1]) + 1;
} t = u;
} return u[n];
}
// a и b су ниске (strings)
2) Infix (префикс-подударања и Lucene индекс)
Друга могућност је infix, који се заснива на префикс-подударањима са токенима у индексираном тексту. За свој рјечник користи Lucene индекс. Lucene је библиотека за претрагу пуним текстом (Apache Software Foundation) која садржи open-source програмске библиотеке.
У пракси, то је индексирана структура која током обраде креира токене. Размаци могу означавати крај или почетак ниске. Појединачне ниске се нормализују ради бољих погодака — на примјер, претварање великих слова у мала — а индексирају се и више повезаних варијанти из рјечника.
Предност је у опциjама које се могу дефинисати у упиту (query), што даје већу флексибилност.
Шта раде комерцијалне претраживачке машине?
Комбинација оба приступа је у суштини оно што већина претраживача нуди. При уносу у поље за претрагу, предлажу се појединачне ниске у контексту других ниски и појмова. Тако се добија семантичка претрага.
Код великих провајдера претраге ови резултати су комерцијално подешени и усмјеравају кориснике ка приоритетним индексима. Странице се сортирају и категоришу преко правила и смјерница. Интересне групе се одређују преко технологија праћења (tracking), AI алгоритама и database marketing-а, а претрага се прилагођава циљној групи.
Related Projects

Veb-sajt sa stavom - Automobile Bauer Joomla

Korporativna proizvodna platforma
Platforma za CMS i portale korporativnog nivoa sa višebaznom arhitekturom, pravom višejezičnošću i profesionalnom migracijom WordPress-a. Razvijena za skalabilne, bezbedne i sisteme za objavljivanje otporne na budućnost.

Локални корени, глобални домети — Комуникациони и медијски системи за савремено пословање
Pomažem lokalnim preduzećima da se predstave kao globalni brendovi: jasno pozicioniranje, sadržaj visokog kvaliteta i distribucija koja pretvara pažnju u potencijalne klijente.