InvalidArgsError в PyLucene пытается создать FSDirectory

Поэтому я пытаюсь реализовать базовый индексатор в PyLucene. Я обычно являюсь Java-разработчиком, но из-за технических ограничений я делаю это на 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 здесь, и кажется, что есть конструктор public SimpleFSDirectory(File path) и похоже, что это то, что я передаю даже в ошибке трассировки. Я что-то упускаю из jcc?

Это использует Lucene 6.4.1, и я могу успешно импортировать lucene и jcc.

1 ответ

Решение

Так что часть документации имеет это

fl = File('index')
indexDir = SimpleFSDirectory(fl)

В более новых версиях (я использую PyLucene на основе Lucene 6.4.1) SimpleFSDirectory ожидает Path Вместо File (Таковы радости от использования библиотеки Java в Python: краткость Java с безопасностью типов Python.) Выше я также не осознавал, что должен был attachCurrentThread

Исправленный код:

path = Paths.get('index')
self.index_directory = SimpleFSDirectory(path)
Другие вопросы по тегам