2009-03-20 4 views
6

Czy istnieje szybki i łatwy sposób na uzyskanie częstotliwości z indeksu Lucene, bez wykonywania go przez klasę TermVectorFrequencies, ponieważ zajmuje to dużo czasu dla dużych kolekcji?Zdobądź częstotliwości w Lucene

Chodzi mi o to, czy istnieje coś takiego jak TermEnum który ma nie tylko częstotliwość dokumentu, ale częstotliwość terminu, jak również?

UPDATE: Korzystanie TermDocs jest zbyt powolny.

Odpowiedz

8

Zastosowanie TermDocs aby uzyskać częstotliwość określenie dla danego dokumentu. Podobnie jak w przypadku częstotliwości dokumentów, otrzymujesz termin dokumenty od IndexReader, używając terminu zainteresowania.


Nie znajdziesz szybszej metody niż TermDocs, nie tracąc ogólności. TermDocs odczytuje bezpośrednio z pliku ".frq" w segmencie indeksu, gdzie każda częstotliwość jest wymieniona w porządku dokumentu.

Jeśli to jest „zbyt wolny”, upewnij się, że masz zoptymalizowana indeks połączyć kilka segmentów w jednym segmencie. Iteruj po dokumentach w kolejności (przeskoki są w porządku, ale nie można efektywnie przeskakiwać na liście dokumentów).

Następnym krokiem może być dodatkowa obróbka, aby stworzyć jeszcze bardziej wyspecjalizowaną strukturę plików, które pomija SkipData. Osobiście poszukałbym lepszego algorytmu, który pozwoliłby osiągnąć mój cel, lub zapewniłby lepszą pamięć sprzętową, aby pomieścić RAMDirectory lub dać systemowi operacyjnemu do użytku we własnym systemie buforowania plików.

1

TermDocs daje TF danego terminu w każdym dokumencie, który zawiera ten termin. Możesz uzyskać DF przez iterowanie przez każdą parę <, częstotliwość i liczbę par, chociaż TermEnums powinny być szybsze. IndexReader ma wartość termDocs(Term) method, która zwraca TermDocs dla danego terminu i indeksu.

+0

czy to podejście może być użyte do określenia częstotliwości terminów to zestaw wyników zapytania Lucene? –

+0

czy można użyć termDocs, aby uzyskać wartość PhraseFrequency? – Dany

2

Wersji bagażnika Lucene (do 4.0, ewentualnie) teraz ujawnia totalTermFreq() dla każdego terminu z TermsEnum. Jest to całkowita liczba wystąpień tego terminu we wszystkich treściach (ale podobnie jak docFreq, nie bierze pod uwagę usunięć).

+0

Używanie lucene 4.0, co jest odpowiednikiem td.read (doc, freq), gdzie td jest termDoc, doc i freq są int []? – lizzie