只有部分pylucene可用吗?

时间:2012-09-19 05:18:42

标签: pylucene

我正在尝试将一些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 订婚正确,但不是全部!?为什么会这样?

2 个答案:

答案 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。