2013-09-01 11 views
5

Do wersji Lucene 3.9 możemy podać indeksowanie lub nie indeksować pola za pomocą FIELD.INDEX.NO lub FIELD.INDEX.ANALYZED itp. Ale w lucene 4.0 nie ma dostępny konstruktor, w którym możemy to zdefiniować. Jak kontrolować indeksowanie w tej wersji?Jak kontrolować Indeksowanie pola w lucene 4.0

Mam na myśli, jeśli chcę, aby pole "nazwa" było przechowywane w indeksie, ale nie chce go indeksować, to jak mogę to zrobić w lucene 4.0?

Odpowiedz

13

Argumenty są dostępne dla konstruktorów pobierających argumenty Field.Index, ale są nieaktualne w wersji 4.0 i nie powinny być używane. Zamiast tego powinieneś zajrzeć do podklas o numerze Field, aby kontrolować sposób indeksowania pola.

  • StringField jest standardowym nieanalizowanym polem indeksowanym. Pole jest indeksowane to pojedynczy token. Odpowiednie są takie rzeczy, jak identyfikatory, do których wystarczy wyszukiwać dokładne dopasowania.

  • TextField to standardowe analizowane (i oczywiście indeksowane) pole tekstowe. Jest to właściwy wybór do wyszukiwania pełnotekstowego.

  • StoredField to przechowywane pole, które nie jest w ogóle indeksowane (a więc nie można go przeszukiwać).

wyjątkiem StoredField, każdy z nich może być przekazane wartości Field.Store jako argument konstruktora, podobnie Lucene 3.6.

Aby uzyskać więcej informacji na temat tej zmiany, spójrz na Lucene Migration Guide, w szczególności sekcje zatytułowane: „Oddzielna IndexableFieldType z wystąpień polowe

+0

Dzięki za odpowiedź. To było pomocne. Jeszcze jedną rzeczą, którą możemy zrobić, jest stworzenie nowego FieldType i ustawienie naszych wymagań przy użyciu dostępnych metod, setIndexed(), setStored() itp. Następnie możemy przekazać ten obiekt typu field do konstruktora pola. –

Powiązane problemy