2012-09-19 21 views
1

我想将一些Java Lucene代码移植到pylucene(v 2.3.1)。我是 使用 http://svn.apache.org/viewcvs.cgi/lucene/pylucene/trunk/samples/和 中的例子大部分的pylucene似乎进入我的python(Ubuntu 12.04,pydev 2.6.0,eclipse 3.7.2)环境就好了。例如,我能够执行 lucene.initVM()(表示JCC就位)及定义一个波特 词干以下从 采取的示例... /样品/ PorterStemmerAnalyzer.py经由:只有部分的pylucene可用?

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.LucenePackage

  • lucene.SimpleFSDirectory与lucene.MMapDirectory

为了远得到这个替换lucene.Version.LUCENE_CURRENT。

http://lucene.apache.org/pylucene/features.html说:“PyLucene API 公开了PyLucene模块中平面命名空间中的所有Java Lucene类。”这似乎并不完全正确, lucene.StopAnalyzer.ENGLISH_STOP_WORDS_SET是pydev已知的,而 lucene.ENGLISH_STOP_WORDS_SET不是。

所以它似乎我得到的/旧版本的一部分/ ...? pylucene 正确使用,但不是全部!?为什么会这样呢?

回答

1

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

从源码分发制作需要一点触摸。 JohnW在 http://john.wesorick.com/2011/11/installing-pylucene-on-ubuntu-1110.html的指示很有帮助。 对于它的价值,这里是我结束了进行更改,先以JDK规格为linux2在jcc/setup.py

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 
0

我用rikb的答案,它的工作,但我不得不改变

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

到...

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

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

另请注意,如果您复制并粘贴所有或部分rikb的Makefile文件块,则每行可能会有空格。然后,'sudo make'步骤会失败,而且很神秘,例如“make:execvp:/ usr:Permission denied”。这是因为“PREFIX_PYTHON =/usr”之后的尾部空格导致尝试执行dir/usr。