gpt4 book ai didi

python - 使用 Lucene (PyLucene) 查找单个字段项

转载 作者:行者123 更新时间:2023-11-28 16:49:33 24 4
gpt4 key购买 nike

我对 Lucene 的 Term Vectors 还很陌生 - 想确保我的术语收集尽可能高效。我正在获取唯一术语,然后检索该术语的 docFreq() 以执行分面。

我正在使用以下方法从索引中收集所有文档术语:

lindex = SimpleFSDirectory(File(indexdir))
ireader = IndexReader.open(lindex, True)
terms = ireader.terms() #Returns TermEnum

这很好用,但是有没有一种方法可以只返回特定字段的术语(跨所有文档)——这样不是更有效吗?

如:

 ireader.terms(Field="country")

最佳答案

IndexReader.terms() 接受可选的 Field() 对象。Field 对象由两个参数组成,Field Name 和 Lucene 称为“Term Field”和“Term Text”的值。

通过为“term text”提供一个空值的 Field 参数,我们可以从我们关注的术语开始我们的术语迭代。

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()

关于python - 使用 Lucene (PyLucene) 查找单个字段项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9091028/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com