当前位置: 首页 > 知识库问答 >
问题:

Pylucene中的DelimitedPayloadFilter?

郎宏逸
2023-03-14

我试图从http://searchhub.org/2010/04/18/refresh-getting-starting-with-payloads/using Pylucene实现java的python版本。我的分析器正在对DelimitedTokenFilter的init调用生成Lucene.InvalidArgSerror

课程在下面,任何帮助都是非常感谢的。用Pylucene3.6构建中的JAR文件编译的java版本工作得很好。

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

共有1个答案

芮宇航
2023-03-14

jcc的医生说:

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

因此,您应该在Pylucene中编辑文件java/org/apache/pylucene/search/semines/pythonDefaultSimilarity.java

import org.apache.lucene.util.BytesRef;
public native float scorePayload(int docId, int start, int end, BytesRef payload);
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)
 类似资料:
  • PyLucene 是 Python 语言用来访问 Lucene 索引库的封装。通过 PyLucene 可以用来创建索引和对索引进行搜索。PyLucene 使用 JCC 构建。 示例说明: Java 代码: for (int i = 0; i < hits.length(); i++) {     Document doc = hits.doc(i);     System.out.println(

  • 其他地方建议使用PyLucene附带的,但事实证明这不是的实例,不能与一起使用。 如何给一组新的停止词?

  • 我终于能够安装最新版本的pylucene,尽管我无法找到如何完成一些基本功能的教程或示例,如索引、指定查询和检索文档。

  • 我是pylucene的新手,我试图构建一个自定义分析器,它只在下划线的基础上标记文本,即它应该保留空白空间。示例:“hi_this is_awesome”应该标记为[“hi”,“this is”,“awesome”]标记。 从各种代码示例中,我了解到需要重写CustomTokenizer的incrementToken方法,并编写CustomAnalyzer,TokenStream需要使用Custo

  • 我使用子JPanel构造JScrollPane,然后尝试将JScrollPane添加到父JPanel中,希望有一个可滚动的自定义JPanel。 我有一个大的细白线前面的所有我的组件,他们是没有滚动。有什么想法吗?

  • 我已经为android Studio创建了一个webview应用程序。但没有加载web URL。错误为NET::ERR_ACCESS_DENIED。有谁能帮忙吗