所以我试图在PyLucene中实现一个基本的索引编写器。我通常是一个java dev但由于技术限制我在python中这样做,否则这不会是一个问题。我正在关注PyLucene Tarball中的样本,但是
import lucene
from java.io import File
from org.apache.lucene.analysis.standard import StandardAnalyzer
from org.apache.lucene.document import Document, Field
from org.apache.lucene.index import IndexWriter, IndexWriterConfig
from org.apache.lucene.store import SimpleFSDirectory
from org.apache.lucene.util import Version
from org.apache.lucene.store import IOContext
lucene.initVM()
fl = File('index')
indexDir = SimpleFSDirectory(fl)
writerConfig = IndexWriterConfig(Version.LUCENE_6_4_1, StandardAnalyzer())
我遇到的问题是,每当我运行此操作时,我都会收到以下错误:
Traceback (most recent call last):
File "Indexer.py", line 40, in <module>
indexer = Indexer()
File "Indexer.py", line 22, in __init__
indexDir = SimpleFSDirectory(fl)
lucene.InvalidArgsError: (<type 'SimpleFSDirectory'>, '__init__', (<File: index>,))
我检查了Java代码here,看起来有一个构造函数public SimpleFSDirectory(File path)
,看起来就是我传递的内容,即使在回溯错误中也是如此。我错过了jcc
的内容吗?
这是使用Lucene 6.4.1,我可以成功导入lucene和jcc。
答案 0 :(得分:1)
所以有些文档有这个
fl = File('index')
indexDir = SimpleFSDirectory(fl)
在较新的版本中(我使用的是基于Lucene 6.4.1的PyLucene)SimpleFSDirectory
需要Path
而不是File
(这是在python中使用java库的乐趣:具有python类型安全性的java的简洁性。)在上面我也没有意识到我必须attachCurrentThread
更正后的代码:
path = Paths.get('index')
self.index_directory = SimpleFSDirectory(path)