Lucene: найти все слова, которые начинаются с определенного префикса - PullRequest
2 голосов
/ 23 мая 2010

Я хочу получить список всех слов в индексе Lucene, которые начинаются с определенного префикса. Я искал способ запросить термины в индексе (мне нужны термины, меня не волнуют документы, из которых они получены), но безуспешно. Есть идеи?

1 Ответ

6 голосов
/ 25 мая 2010

Понял! FilteredTermEnum подклассы (FuzzyTermEnum, RegexTermEnum, WildcardTermEnum) делают именно то, что мне нужно.

Вот краткий пример:

FSDirectory dir = FSDirectory.open(new File("index"));
IndexWriter writer = new IndexWriter(dir, new WhitespaceAnalyzer(),
    true, new IndexWriter.MaxFieldLength(20));
IndexReader reader = IndexReader.open(dir);

Document doc = new Document();
doc.add(new Field(
    "text",
    "Life #consists not in #holding good cards, but in playing those you hold well.",
    Field.Store.NO, Field.Index.ANALYZED));
writer.addDocument(doc);
writer.close();

WildcardTermEnum tagsEnum = new WildcardTermEnum(reader, new Term("text", "#*"));
do {
    System.out.println(tagsEnum.term());
} while (tagsEnum.next());
...