在Python环境下的Lucene,pylucene,本质还是基于JAVA写的,Python通过JNI调用Lucene,下面是安装经历,供大家避雷。
首先,pylucene下载地址,这边有很多版本,第一次安装 pylucene-4.10 ,安装过程中出现 java.lang.UnsupportedClassVersionError 大致就是版本不一致的错误,查了下,发现pylucene6.0以下的需要JDK7,而pylucen6以上的需要JDk8,而我是JDK8,无赖换 pylucen6.5.0,这一次安装过程中出现一个问题是找不到 helper文件,发现pylucen6.5.0的解压包里面有helper2,helper3.唯独没有helper,于是将pylucene6.5 下面的helper2,helper3分别重命名为helper,helper2,一路安装,结果在make 的时候出现一个问,在生成的JCC文件中,__init__.py文件出现问题:找不到from jcc import _jcc2,无赖,发现问题大了。。不能再改名字呀,于是,又换一个包pylucene6.4,这次一路顺畅,
结论,建议在JDK8的环境下安装pylucene6.4!
官方安装指南,How to install pylucene ,里面有所需依赖
安装教程:
tar -zxvf pylucene-6.4.0-src.tar.gz
pushd jcc
JDK = {
'darwin': JAVAHOME or JAVAFRAMEWORKS,
'ipod': '/usr/include/gcc',
'linux2': '/usr/lib/jvm/jdk1.8.0_121',#你的JDK路径
'sunos5': '/usr/jdk/instances/jdk1.6.0',
'win32': JAVAHOME,
'mingw32': JAVAHOME,
'freebsd7': '/usr/local/diablo-jdk1.6.0'
}
JAVAC = {
'darwin': ['javac', '-source', '1.5', '-target', '1.5'],
'ipod': ['jikes', '-cp', '/usr/share/classpath/glibj.zip'],
'linux2': ['/usr/lib/jvm/jdk1.8.0_121/bin/javac'],#你的JDK路径
'sunos5': ['javac'],
'win32': ['%(win32)s/bin/javac.exe' %(JDK)],
'mingw32': ['%(mingw32)s/bin/javac.exe' %(JDK)],
'freebsd7': ['javac'],
}
JAVADOC = {
'darwin': ['javadoc'],
'ipod': [],
'linux2': ['/usr/lib/jvm/jdk1.8.0_121/bin/javadoc'],#你的JDK路径
'sunos5': ['javadoc'],
'win32': ['%(win32)s/bin/javadoc.exe' %(JDK)],
'mingw32': ['%(mingw32)s/bin/javadoc.exe' %(JDK)],
'freebsd7': ['javadoc'],
}
保存
python setup.py build
sudo python setup.py install
popd
退出jcc文件夹,编辑Makefile文件
# Linux (Debian Jessie 64-bit, Python 2.7.9, Oracle Java 1.8
# Be sure to also set JDK['linux2'] in jcc's setup.py to the JAVA_HOME value
# used below for ANT (and rebuild jcc after changing it).
PREFIX_PYTHON=/usr #你Python的主文件
ANT=JAVA_HOME=/usr/lib/jvm/jdk1.8.0_121 /usr/bin/ant #前面是你JDK文件路径,后面是你ANT路径
PYTHON=$(PREFIX_PYTHON)/bin/python
JCC=$(PYTHON) -m jcc --shared
NUM_FILES=8
退出,保存
make
make test
sudo make install
测试:
打开Python
import lucene
lucene.initVM()
在pylucene默认安装里面并不包含中文分词工具的,其自带的标准分析器(StandardAnalyzer),仅仅是将汉字分成独立的一个个字,这会导致一个类似:搜索“西游记”的时候,给你返回的第一个是“游”,所以需要我们修改Makefile文件,增加 中文分词工具,SmartChineseAnalyzer,其实还有另一个选项,安装paoding分词工具,这个还没尝试,等下次再说,这里仅仅说明如何安装自带的SmartChineseAnalyzer,如果你已经安装完毕,那么需要你再次make,覆盖安装,Makefile文件修改如下:
#JARS+=$(SMARTCN_JAR) # smart chinese analyzer
GENERATE=$(JCC) $(foreach jar,$(JARS),--jar $(jar)) \
--exclude org.apache.lucene.sandbox.queries.regex.JakartaRegexpCapabilities \
在这句话的下一行,增添一句话:
--exclude org.apache.lucene.analysis.cn.smart.AnalyzerProfile\
保存Makefile,再次
make
make test
sudo make install
from org.apache.lucene.analysis.cn.smart import SmartChineseAnalyzer
导入,剩下的跟 StandardAnalyzer 用法一致