Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Solr 更改Lucene的索引(过帐)结构_Solr_Lucene_Information Retrieval_Inverted Index - Fatal编程技术网

Solr 更改Lucene的索引(过帐)结构

Solr 更改Lucene的索引(过帐)结构,solr,lucene,information-retrieval,inverted-index,Solr,Lucene,Information Retrieval,Inverted Index,我正在研究索引文档的新方法。我特别想 将现有索引结构更改为实验索引技术。例如,如果Lucene有反向索引,在索引时保存术语和文档Id,我想扩展该结构以保存其他信息,例如关于术语的位置或统计信息。我将如何进行这样的扩展?有没有比Lucene更好的开源项目来做这样的扩展?谢谢 是的,Lucene是一个很好的目标(不确定是否有更好的诚实选择) 我想你最终会创建你的自定义编解码器。看,现代Lucene中当前编解码器背后的主要人物。他在这里提到了一些有用的东西,这些东西可以让你理解和使用编解码器。当然,不

我正在研究索引文档的新方法。我特别想
将现有索引结构更改为实验索引技术。例如,如果Lucene有反向索引,在索引时保存术语和文档Id,我想扩展该结构以保存其他信息,例如关于术语的位置或统计信息。我将如何进行这样的扩展?有没有比Lucene更好的开源项目来做这样的扩展?谢谢

是的,Lucene是一个很好的目标(不确定是否有更好的诚实选择)

我想你最终会创建你的自定义编解码器。看,现代Lucene中当前编解码器背后的主要人物。他在这里提到了一些有用的东西,这些东西可以让你理解和使用编解码器。当然,不是生产用的

例如,如果Lucene有反向索引,在索引时保存术语和文档Id,我想扩展该结构以保存其他信息,例如关于术语的位置或统计信息

Lucene中的每个帖子条目都非常通用。Lucene已经有了以字节流形式保存泛型类型(对象)的规定,借助于与每个postings条目关联的有效负载对象

有效载荷的一个非常常见的用途是存储术语位置。例如,对于术语t,如果它出现在文档D1中的位置1和3,以及D2中的位置2和5,则可以将其保存为t过帐中的不同条目,如下所示

*t* => (D1,1) (D1,3) (D2, 2) (D2, 5)
最简单的方法是使用Lucene类。在分析文本时,只需在每个术语旁边写出术语位置,并用特定字符分隔,例如“|”,如下例所示

class PayloadAnalyzer extends Analyzer {
private PayloadEncoder encoder;

PayloadAnalyzer(PayloadEncoder encoder) {
  this.encoder = encoder;
}

public TokenStream tokenStream(String fieldName, Reader reader) {
  TokenStream result = new WhitespaceTokenizer(reader);
  result = new LowerCaseFilter(result);
  result = new DelimitedPayloadTokenFilter(result, '|', encoder);
  return result;
}
}
对于有效载荷中存储的值的解码,您可以使用如下内容

class PayloadSimilarity extends DefaultSimilarity {
    @Override
    public float scorePayload(String fieldName, byte[] bytes, int offset, int length) {
      return PayloadHelper.decodeFloat(bytes, offset);
    }
}
然后,您可以使用该类在文档排序期间使用这些术语偏移量

大声思考,我认为对你来说,一个好的练习是存储其他特定于术语的信息,可以是-I)词性(POS)术语标记,ii)术语的词向量,等等,在有效负载中,并在排名期间使用所有这些特性的组合