在等待有人回答后,我也在 pylucene 开发者邮件列表上问了这个问题。
Andi Vajda 在那里回答。我代表安迪回答这个问题。
引用安迪的话:
在 PyLucene Makefile 中找到 jcc 调用并将 java.io.BufferedReader 添加到长命令行(根据需要不要忘记结尾的 \)并重建 PyLucene。
更多信息:
在 pyLucene 的 Makefile 中,你会发现这一行GENERATE=$(JCC) $(foreach jar,$(JARS),--jar $(jar)) \
。在这应该有一行--package java.io
,添加您想要添加到 JCC 的类(BufferedReader),以便它可用于 python 代码。
然后再次编译安装pylucene。(你可以在 PyLucene 的文档中找到关于编译和安装的信息,或者你也可以使用这个)。
此外,BufferedReader
要从文件中创建对象,您将需要FileReader
. 所以也加上。
仅用于完整性:添加此行后,我GENERATE
将如下所示:
GENERATE=$(JCC) $(foreach jar,$(JARS),--jar $(jar)) \
$(JCCFLAGS) --use_full_names \
--package java.lang java.lang.System \
java.lang.Runtime \
--package java.util java.util.Arrays \
java.util.Collections \
java.util.HashMap \
java.util.HashSet \
java.util.TreeSet \
java.lang.IllegalStateException \
java.lang.IndexOutOfBoundsException \
java.util.NoSuchElementException \
java.text.SimpleDateFormat \
java.text.DecimalFormat \
java.text.Collator \
--package java.util.concurrent java.util.concurrent.Executors \
--package java.util.regex \
--package java.io java.io.StringReader \
java.io.InputStreamReader \
java.io.FileInputStream \
java.io.BufferedReader \
java.io.FileReader \
--exclude org.apache.lucene.sandbox.queries.regex.JakartaRegexpCapabilities \
--exclude org.apache.regexp.RegexpTunnel \
--python lucene \
--mapping org.apache.lucene.document.Document 'get:(Ljava/lang/String;)Ljava/lang/String;' \
--mapping java.util.Properties 'getProperty:(Ljava/lang/String;)Ljava/lang/String;' \
--sequence java.util.AbstractList 'size:()I' 'get:(I)Ljava/lang/Object;' \
org.apache.lucene.index.IndexWriter:getReader \
--version $(LUCENE_VER) \
--module python/collections.py \
--module python/ICUNormalizer2Filter.py \
--module python/ICUFoldingFilter.py \
--module python/ICUTransformFilter.py \
$(RESOURCES) \
--files $(NUM_FILES)
这样做还不够,您还必须编译 lucene 基准库,它默认不包含在安装库中,因为TrecTopicsReader
它存在于基准 api 中。
要编译和安装基准:您必须修改主 lucene 文件夹中的 build.xml,其中存在基准文件夹,然后您必须将此 jar 包含在主 Makefile 中以将其作为 egg 安装到 python 库中。
build.xml:您必须进行三处修改。为简单起见,请遵循jar-test-framework
并且无论出现在哪里,都尝试为jar-benchmark
.
你必须做的三个改变是:
1) <target name="package" depends="jar-core, jar-test-framework, build-modules, init-dist, documentation"/>
用 <target name="package" depends="jar-core, jar-test-framework, jar-benchmark, build-modules, init-dist, documentation"/>
2)对于规则
<target name="jar" depends="jar-core,jar-test-framework"
description="Jars core, codecs, test-framework, and all modules">
<modules-crawl target="jar-core"/>
</target>
将其替换为
<target name="jar" depends="jar-core,jar-test-framework, jar-benchmark"
description="Jars core, codecs, test-framework, and all modules">
<modules-crawl target="jar-core"/>
</target>
3)在命名的目标之后添加以下目标/规则jar-test-framework
<target name="jar-benchmark">
<ant dir="${common.dir}/benchmark" target="jar-core" inheritAll="false">
<propertyset refid="uptodate.and.compiled.properties"/>
</ant>
</target>
MakeFile:在这里你还必须做三处修改。为简单起见,请遵循HIGHLIGHTER_JAR
并添加类似的规则BENCHMARK_JAR
。您必须进行的三个更改是:
1)以类似的方式查找JARS+=$(HIGHLIGHTER_JAR)
并添加。JARS+=$(BENCHMARK_JAR)
2)以类似的方式在此行之后查找HIGHLIGHTER_JAR=$(LUCENE)/build/highlighter/lucene-highlighter-$(LUCENE_VER).jar
并添加。BENCHMARK_JAR=$(LUCENE)/build/benchmark/lucene-benchmark-$(LUCENE_VER).jar
3)在那之后找到规则$(ANALYZERS_JAR):
和另一条规则$(BENCHMARK_JAR):
。
$(BENCHMARK_JAR): $(LUCENE_JAR)
cd $(LUCENE)/benchmark; $(ANT) -Dversion=$(LUCENE_VER) compile
为了完整起见,这里是我的最终 Mkaefile 和 build.xml 文件。