2009-09-28 8 views
8

Mam instancję Solr zawierającą dokumenty, które mają pole "startTime" od ostatniego miesiąca do roku od teraz. Chciałbym dodać zapytanie/funkcję doładowania, aby zwiększyć liczbę dokumentów, których pole startTime jest zbliżone do bieżącego czasu.SOLR - Funkcja wzmocnienia (bf) w celu zwiększenia liczby dokumentów, których data jest najbliżej TERAZ

Do tej pory widziałem wiele przykładów, które wykorzystują rord do dodawania boostów do dokumentów, które są nowsze, ale nigdy nie widziałem przykładu czegoś takiego.

Czy ktoś może mi powiedzieć, jak to zrobić?

Dzięki

+0

czy próbowałeś pytać o użytkownika solr? –

Odpowiedz

15

Jeśli jesteś na Solr 1.4+, wtedy masz dostęp do funkcji „MS” w zapytaniach funkcji i standardu podejście podręcznik do pobudzenia przez recency jest:

recip(ms(NOW,startTime),3.16e-11,1,1) 

ms podaje liczbę milisekund między dwoma argumentami. Wyrażenie jako całość zwiększa wyniki o 1 dla dokumentów z datą teraz, o 1/2 dla dokumentów datowanych 1 rok temu, o 1/3 dla dokumentów sprzed 2 lat itp. (Patrz http://wiki.apache.org/solr/FunctionQuery#Date_Boosting, jak wskazał Sean Timm.)

w twoim przypadku masz dokumenty datowane w przyszłości, a te będą przydzielane negatywny wynik od powyższej funkcji, więc prawdopodobnie będzie chciał rzucić w wartości bezwzględnej, jak to:

recip(abs(ms(NOW,startTime)),3.16e-11,1,1) 

abs (ms (TERAZ, startTime)) da # milisekund między startTime i teraz, z gwarancją nieujemności.

To byłoby dobre miejsce początkowe. Jeśli chcesz, możesz zmodyfikować 3.16e-11, jeśli jest zbyt agresywny lub mało agresywny.

Stycznie funkcja ms działa tylko na polach opartych na klasie TrieDate, a nie na klasach klasy Date i LegacyDate. Jeśli twój plik schema.xml był oparty na przykładzie dla Solr 1.4, to pole daty prawdopodobnie ma już prawidłowy format.

+1

To jest dobra odpowiedź. Znalazłem inny, który wyjaśnia również, dlaczego używają wersji 3.16e-11 i jak go zmienić, aby spełnić Twoje potrzeby: http://stackoverflow.com/a/22213417/241367 – thekingoftruth

+0

Jeśli to nie zadziała, możesz spróbować: {! boost b = recip (rord (contentdate), 1,1000,1000)} –

Powiązane problemy