首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyLucene中的DelimitedPayloadFilter?

PyLucene中的DelimitedPayloadFilter?
EN

Stack Overflow用户
提问于 2012-11-17 07:57:19
回答 1查看 248关注 0票数 1

我正在尝试使用pylucene从http://searchhub.org/2010/04/18/refresh-getting-started-with-payloads/实现一个python版本的java。我的分析器在对DelimitedTokenFilter的初始化调用中生成一个lucene.InvalidArgsError

这个类在下面,任何帮助都是非常感谢的。使用pylucene 3.6版本中的JAR文件编译的java版本运行良好。

代码语言:javascript
复制
import lucene
class PayloadAnalyzer(lucene.PythonAnalyzer):
    encoder = None
    def __init__(self, encoder): 
        lucene.PythonAnalyzer.__init__(self) 
        self.encoder = encoder

    def tokenStream(self, fieldName, reader):
        result = lucene.WhitespaceTokenizer( lucene.Version.LUCENE_CURRENT, reader )
        result = lucene.LowerCaseFilter( lucene.Version.LUCENE_CURRENT, result )
        result = lucene.DelimitedPayloadTokenFilter( result, '|', self.encoder )
        return result
EN

回答 1

Stack Overflow用户

发布于 2014-12-09 13:27:55

jcc的doc表示:

当JCC看到这些特殊的扩展java类时,它会生成实现它们声明的本机方法的C++代码。这些本机方法调用相应的Python方法实现,传入参数并将结果返回给Java VM调用者。

因此,您应该在pylucene中编辑文件java/org/apache/pylucene/search/similarities/PythonDefaultSimilarity.java

添加一些如下代码:

代码语言:javascript
复制
import org.apache.lucene.util.BytesRef;
public native float scorePayload(int docId, int start, int end, BytesRef payload);

在此之后,您的代码可以覆盖方法scorePayload

代码语言:javascript
复制
class PayloadSimilarity(PythonDefaultSimilarity):

    def scorePayload(self, docId, start, end, payload):
        return PayloadHelper.decodeFloat(payload.bytes, end)


class PayloadAnalyzer(PythonAnalyzer):
    encoder = None

    def __init__(self, encoder):
        super(PayloadAnalyzer, self).__init__()
        self.encoder = encoder

    def createComponents(self, fieldName, reader):
        source = WhitespaceTokenizer(Version.LUCENE_44, reader)
        result = LowerCaseFilter(Version.LUCENE_44, source)
        result = DelimitedPayloadTokenFilter(result, u'|', self.encoder)
        return self.TokenStreamComponents(source, result)

我在pylucene4.8下测试了上面的代码。它工作得很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13426157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档