Solr Fuzzy Suggester und Solr Infix Suggester über Ajax

За ефикасну претрагу на веб-сајту важно је да корисници брзо и једноставно пронађу одговарајуће резултате. Solr Fuzzy Suggester и Solr Infix Suggester нуде ефикасно рјешење за то. Они се могу позивати и филтрирати преко Ajax упита.
Објављено:
Admin User
published
Solr Fuzzy Suggester und Solr Infix Suggester über Ajax

Слика генерисана

Опис пројекта

За ефикасну претрагу на веб-сајту важно је да корисници брзо и једноставно пронађу одговарајуће резултате. 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-а, а претрага се прилагођава циљној групи.