2010-10-13 14 views
5

Chociaż jest to totalny nowicjusz, może to być pytanie naiwne. Chcę przeszukać mój indeks na podstawie indeksu. Tak więc spróbowałem stworzyć dokument z jednym indeksem, nazwą, a następnie chcę wyszukać to konkretne pole.Wyszukiwanie według pola w Lucene

Robię to podczas próby sprawdzenia, czy mogę zaktualizować pola dokumentu bez faktycznego usuwania dokumentu w lucene.

Dzięki.

Odpowiedz

0

Robię to w trakcie próby sprawdzenia, czy mogę zaktualizować pola dokumentu bez faktycznego usuwania dokumentu w Lucunie.

Nie rozumiem pierwszego pytania, ale nie można zaktualizować dokumentu w Lucene. Musisz usunąć i ponownie wstawić.

+0

Cześć Thilo, chcę przeszukać mój indeks według pola. Na przykład chcę uzyskać wartość określonego pola [say Name] w moim indeksie. Zwykle robisz to za pomocą Document.getField ("Nazwa"), jeśli znasz dokument, ale nie mogę go uruchomić podczas wyszukiwania indeksu. – Sunil

+1

Document.getField będzie działał tylko wtedy, gdy pole jest ZAPISANE (a nie tylko INDEXED). – Thilo

4

Możesz wyszukiwać słowa w określonym polu ze składnią dwukropka, tj. name:john.

Ale ponieważ wiele indeksów ma tylko jedno pole, które chcesz przeszukać, istnieje domyślne pole, na wypadek gdybyś po prostu szukał john. Można określić, które pole to jest, kiedy instanciate swoją QueryParser

QueryParser parser = new QueryParser(Version.LUCENE_30, "name", anAnalyzer); 
Query q = parser.parse("john"); 

Jeśli chcesz utworzyć zapytania programowo zamiast analizowania ciąg zapytania wprowadzone przez użytkownika, to trzeba również określić pole jednoznacznie, na przykład:

Query q = new TermQuery(new Term("name", "john")); 

Linki: Using fields in Lucene queries (Lucene Query Syntax) | QueryParser Javadoc | TermQuery Javadoc

Powiązane problemy