2015-05-28 16 views
6

Przeprowadzam kwerendę z rdzeniem SOLR i ograniczam wynik przy użyciu filtru , takiego jak fq: {!frange l=0.7 }query($q). Jestem świadomy, że wyniki SOLR nie mają wartości bezwzględnej, ale 0,7 (tylko przykład) jest obliczana na podstawie danych wejściowych użytkownika i niektórych heurystyk, które działają całkiem dobrze.Uzyskiwanie stabilnych wyników SOLR

Problem jest następujący: Aktualizuję kilka dokumentów w moim rdzeniu. Zaktualizowane pola są tylko polami danych meta, które nie są związane z wyszukiwaniem powyżej . Ale ponieważ aktualizacja jest wewnętrznie usuń + insert, IDF i doc liczy zmiany. Podobnie obliczone wyniki. Nagle moje zapytanie zwraca różne wyniki.

Jak wyjaśnił mi Yonik here, to zachowanie jest zgodne z projektem. Moje pytanie brzmi: jaki jest najprostszy i minimalny sposób na utrzymanie stabilności wyników i wyników zapytania?

Uruchamianie optymalizacji po każdym zatwierdzeniu powinno rozwiązać problem, ale ja zastanawiam się, czy jest coś prostszego i mniej kosztownego.

Odpowiedz

1

Naprawdę potrzebujesz uruchomić optymalizację. Po zoptymalizowaniu indeksu Solr wyczyść wszystkie dokumenty, które nie zostały jeszcze wskazane, i spraw, by zapytanie stało się stabilne. Dzieje się tak, ponieważ kompilacja informacji o tych metadanych jest kosztowna, aby można ją było wykonywać przez cały czas aktualizowania dokumentu. Z tego powodu solr po prostu to zoptymalizuj. Istnieje dobry sposób sprawdzenia, czy indeks jest mniej więcej stabilny ... Kiedy uzyskujesz dostęp do Solr API, możesz zobaczyć informacje: Num Docs i Max Doc. Jeśli numer Max Doc jest większy niż Num Docs, oznacza to, że masz kilka starych produktów wpływających na obliczanie trafności. Optymalizując indeks, te dwie liczby zostają ponownie wyrównane. Jeśli te liczby są równe, można ufać, że IDF został obliczony poprawnie.

Powiązane problemy