我正在尝试将一些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已到位)并定义一个Porter 取决于取自的例子 ... / samples / PorterStemmerAnalyzer.py via:
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.Version.LUCENE_CURRENT
lucene.SimpleFSDirectory with lucene.MMapDirectory
为了达到这个目的。
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 订婚正确,但不是全部!?为什么会这样?
答案 0 :(得分:1)
几乎可以肯定,问题与最新版本的pylucene有关,因为.deb是2.3.1而pylucene现在是v.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
答案 1 :(得分: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”之后的尾随空格导致make尝试执行dir / usr。