Silniejszy boosting według daty w Solr

Zwiększenie pola według daty w solr jest zdefiniowane jako:

{!boost b=recip(ms(NOW,datefield),3.16e-11,1,1)}

Szukałem wszędzie (przykłady: Solr Dismax Config for Boost Scoring i Solr boost for multivalued date field i wszystkie odwołują się do SolrRelevancyFAQ ), tej samej definicji, która jest używana. Ale odkryłem, że nie poprawia to wystarczająco moich wyników. Jak sprawić, by ta data była silniejsza?

Użytkownik szuka dwóch słów kluczowych. Obie pozycje zawierają oba słowa kluczowe (w tej samej kolejności) w zarówno tytuł, jak i opis. Żadne ze słów kluczowych nie jest powtarzane.

I wyjście debugowania solr jest dla mnie zbyt mylące, aby zrozumieć problem.

To nie jest wielki problem. 99% zapytań działa dobrze i produkować oczekiwane wyniki, więc jego nie jak solr nie działa w ogóle, po prostu znalazłem tę sytuację, która jest bardzo mylące dla mnie i nie wiem, jak postępować.
Author: Farhan Tahir, 2014-02-25

3 answers

Użytkownik szuka dwóch słów kluczowych. Oba elementy zawierają oba słowa kluczowe (w tej samej kolejności) w tytule i opisie. Żadne ze słów kluczowych powtarza się.

Cóż, na twoim przykładzie jest jasne, że Twoje wyniki wylądowały w sytuacji tie. Aby zrozumieć ten problem mylące debugowanie wyjścia i opracowanie tie-breaker polityki, ważne jest, aby zrozumieć dismax.

With DisMax queries, the different terms of dane wejściowe użytkownika są wykonywane z różnymi polami, jeśli wiele z nich trafi (termin pojawia się w różnych polach w tym samym document), używany jest hit, który osiąga wyższe wyniki, ale co się dzieje z innymi zapytaniami podrzędnymi, które trafiają w tym document dla tego terminu? To właśnie definiuje parametr tie. DisMax obliczy wynik dla zapytania terminowego jako:

score= [score of the top scoring subquery] + tie * (sum of other hitting subqueries)

W konsekwencji, parametr tie jest wartością z zakresu od 0 do 1, która określi, czy Dismax będzie uwzględniał tylko maksymalne trafienie score dla term (ustawienie tie=0), Wszystkie trafienia dla term (ustawienie tie=1) lub coś pomiędzy tymi dwoma skrajnościami.

Parametr boost jest bardzo podobny do parametru bf, ale zamiast dodawać swój wynik do końcowego wyniku, pomnoży go. Jest to dostępne tylko w Extended Dismax Query Parser lub Lucid Query Parser.

Jest ciekawy artykuł porównujący metody Boost SOLR, który może być przydatny do ty.

Referencje dla tej odpowiedzi:

Shishir

 5
Author: Shishir Kumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-15 08:33:30

Recip (x, m, a, b) implementuje f(x) = a/(xm+b) z:

  • x : wiek dokumentu w ms, zdefiniowany jako ms(NOW,<datefield>).

  • m : stała, która określa skalę czasu, która jest używana do zastosowania boost. Powinien być w stosunku do tego, co uważasz za stary wiek dokumentu (a reference_time) w milisekundach. Na przykład, wybór reference_time z 1 roku (3.16e10ms) implikuje użycie jej odwrotności : 3.16e-11 (1/3.16e10 zaokrąglone).

  • a i {[6] } są stałymi (definiowanymi dowolnie).

  • xm = 1 gdy dokument ma wartość 1 reference_time old (mnożnik = a/(1+b)).
    xm ≈ 0 gdy dokument jest nowy, co daje wartość bliską a/b.

  • Użycie tej samej wartości dla a i b zapewnia, że mnożnik nie przekracza 1 w przypadku ostatnich dokumentów.

  • Z a = b = 1, a 1 reference_time stary dokument ma mnożnik około 1/2, A 2 reference_time stary dokument ma mnożnik około 1/3, i tak dalej.

Jak sprawić, by randka była silniejsza ?

  • Increase m: Wybierz lower reference_time na przykład 6 miesięcy, co daje nam m = 6.33e-11. W porównaniu do roku odniesienia, mnożnik zmniejsza się 2x szybciej wraz ze wzrostem wieku dokumentu.

  • Zmniejszenie a i b rozszerza krzywą odpowiedzi funkcji. To może być bardzo agresywny. Przykład tutaj (Strona 8)

  • Zastosuj boost do samej funkcji boost z parametrem bf za pomocą parsera zapytań dismax lub edismax: bf=recip(ms(NOW,datefield),3.16e-11,1,1)^2.0

Zauważ, że bf zachowuje się jak dodatek : działa jako bonus dodawany do nowszej punktacji dokumentów, podczas gdy {!boost b} działa bardziej jako kara stosowana do wyniku starszego dokumentu. W każdym razie, użycie dodatku boost może być dobrym sposobem na zwiększenie nowszych dokumentów. Pamiętaj tylko, że wynik bf jest niezależny od wyniku globalnego( trafność), co oznacza, że odpowiedni zestaw wyników (z wyższymi wynikami) może nie mieć wpływu tak bardzo, jak brak odpowiedniego zestawu wyników (z niższymi wynikami), więc w zależności od potrzeb może być interesujący.

 34
Author: EricLavault,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-26 21:45:09

Jest bardzo dobrze przedstawiony przykład w Revsalfloatfunction , który da ci jasny obraz tego, jak działa receptura wspomagania. Jeśli okaże się, że dismax nie daje Ci wystarczającej kontroli nad boostingiem, będziesz musiał trochę majstrować przy BoostQParserPlugin.

Mnożnik 3,16 E-11 zmienia jednostki z milisekund na lata (ponieważ jest około 3. 16e10 milisekund rocznie). Tak więc bardzo recent date da wartość bliską 1 / (0+1) lub 1, date rok w przeszłość otrzyma mnożnik około 1 / (1+1) lub 1/2, A Data Druga lat daje 1/(2+1) lub 1/3.

 1
Author: Ion Cojocaru,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-04 08:33:28