跳转到主要内容

PyLucene的初始化辅助和简单包装器

项目描述

lucene模块包装器

lucene模块包装器负责处理JCC API中的初始化和线程陷阱。当从外观模块检索第一个对象时,它会自动初始化虚拟机。如果PyLucene已经初始化,外观模块会确保当前线程已附加。

包装器还解决了JVM安装其自己的信号处理程序的问题。默认情况下,JVM在initVM()中覆盖Python的信号处理程序,从而导致一些难以调试的问题。例如,SIGINT不再转换为KeyboardInterrupt异常。包装器代码将所有信号处理程序恢复到其原始状态。仅保留JVM的SIGSEGV处理程序,因为当JVM段错误时,它会记录并打印有用的信息。

classpath参数是可选的。如果没有设置classpath,smc.lucene会自动为您添加classpath=lucene.CLASSPATH。

示例1 - 按需初始化Lucene

替换如下代码

import lucene
lucene.initVM(classpath=lucene.CLASSPATH, vmwargs='...')

def query_lucene(...):
    lucene.attachCurrentThread()
    query = lucene.BooleanQuery()
    ...

from smc.lucene import lucene
lucene.set_initargs(vmargs='...')

def query_lucene(...):
    query = lucene.BooleanQuery()

当从外观模块检索BooleanQuery属性时,会自动初始化Lucene。如果PyLucene已经初始化,外观模块会确保当前线程已附加。

您不能将Lucene属性分配给跨线程共享的对象。如果您必须跨线程共享对象,您必须在使用对象之前调用lucene.attach()。

示例2 - 显式初始化Lucene

示例

from smc.lucene import lucene as lucene_wrapper
from lucene import BooleanQuery

def query_lucene(...):
    lucene_wrapper.attach()
    query = BooleanQuery()

attach方法要么初始化lucene,要么附加当前线程。

作者

Christian Heimes

项目详细信息


由以下支持