IndexReader.terms() принимает объект необязательное поле(). Объекты поля состоят из двух аргументов: Имя поля и Значение, которое lucene вызывает «Поле времени» и «Текст терминов».
Предоставляя аргумент поля пустое значение для «текста терминов», мы можем начать нашу терминологическую итерацию в том термине, о котором мы говорим.
lindex = SimpleFSDirectory(File(indexdir))
ireader = IndexReader.open(lindex, True)
# Query the lucene index for the terms starting at a term named "field_name"
terms = ireader.terms(Term("field_name", "")) #Start at the field "field_name"
facets = {'other': 0}
while terms.next():
if terms.term().field() != "field_name": #We've got every value
break
print "Field Name:", terms.term().field()
print "Field Value:", terms.term().text()
print "Matching Docs:", int(ireader.docFreq(term))
Надеемся, что другие пользователи, которые ищут, как выполнить огранку в PyLucene, увидят, что столкнулись с этим сообщением. Ключ - это индексирование терминов как есть. Просто для полноты это то, как значения поля должны индексироваться.
dir = SimpleFSDirectory(File(indexdir))
analyzer = StandardAnalyzer(Version.LUCENE_30)
writer = IndexWriter(dir, analyzer, True, IndexWriter.MaxFieldLength(512))
print "Currently there are %d documents in the index..." % writer.numDocs()
print "Adding %s Documents to Index..." % docs.count()
for val in terms:
doc = Document()
#Store the field, as-is, with term-vectors.
doc.add(Field("field_name", val, Field.Store.YES, Field.Index.NOT_ANALYZED, Field.TermVector.YES))
writer.addDocument(doc)
writer.optimize()
writer.close()
Я думаю, что это может быть решением ... http://wiki.apache.org/lucene-java/LuceneFAQ#How_do_I_retrieve_all_the_values_of_a_particular_field_that_exists_within_an_index.2C_across_all_documents.3F –