只有pylucene的零件可用



我正在尝试将一些Java Lucene代码移植到pylucene(2.3.1版)中使用中的示例http://svn.apache.org/viewcvs.cgi/lucene/pylucene/trunk/samples/和大部分pylucene似乎都进入了我的python(ubuntu 12.04,pydev2.6.0,eclipse 3.7.2)环境不错。例如,我能执行initVM()(显示JCC已就位)并定义Porterstemmer以…/samples/PorterStemmerAnalyzer.py通过:

self.analyzer = PorterStemmerAnalyzer()

但当我尝试创建一个新的IndexWriter时,它会碰到构造函数的最后一个参数:

self.writer = lucene.IndexWriter(self.store, self.analyzer, True, lucene.IndexWriter.MaxFieldLength.LIMITED)

我得到这个错误:

AttributeError: type object 'IndexWriter' has no attribute 'MaxFieldLength'.

这是目前让我困惑的错误,但也有我还做了其他几个黑客(来自他们的版本…/样本)(但也担心):

  • 取代lucene。版本.LUCENE_CURRENT与LUCENE。LucenePack

  • lucene.SimpleFSDirectory与lucene。MMapDirectory

为了走到这一步。

http://lucene.apache.org/pylucene/features.html"PyLucene API在PyLucene中的一个平面命名空间中公开所有Java Lucene类单元"这似乎并不完全正确,lucene。StopAnalyzer.ENGLISH_STOP_WORDS_SET为pydev所知,而lucene。ENGLISH_STOP_ORDS_SET不是。

所以看起来我是旧版本/的一部分。。。?半透明的啮合正确,但不是全部!?为什么会这样?

几乎可以肯定,这个问题与最新版本的pylucene有关。deb是2.3.1,而pylucene现在是3.6.1!

从源头分发需要一些接触。JohnW的说明http://john.wesorick.com/2011/11/installing-pylucene-on-ubuntu-1110.html都很有帮助。值得一提的是,以下是我最终所做的更改,首先是对jcc/setup.py:中linux2的JDK规范

JDK = {
'darwin': JAVAHOME,
'ipod': '/usr/include/gcc',
'linux2': '/usr/lib/jvm/java-7-openjdk-amd64',
'sunos5': '/usr/jdk/instances/jdk1.6.0',
'win32': JAVAHOME,
'mingw32': JAVAHOME,
'freebsd7': '/usr/local/diablo-jdk1.6.0'
}

然后到Makefile:

PREFIX_PYTHON=/usr
ANT=JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64 /usr/bin/ant
PYTHON=$(PREFIX_PYTHON)/bin/python
JCC=$(PYTHON) -m jcc --shared
NUM_FILES=4

我使用了rikb的答案,它有效,但我不得不更改

'inux2':'/usr/lib/jvm/java-7-openjdk-amd64',

到。。。

'inux2':'/usr/lib/jvm/java-6-openjdk-amd64',

因为我使用的是Java 6。看起来他也是,所以也许他还没有在Linux上使用过这种配置。

还要注意的是,如果你为Makefile复制并粘贴rikb的全部或部分内容,你可能会在每一行都有尾随空格。然后,"sudo make"步骤将失败,相当神秘,并显示类似"make:execvp:/usr:Permission denied"的消息。这是因为"PREFIX _PYTHON=/usr"后面的尾随空格导致make尝试执行dir/usr。

最新更新