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)术语的词向量,等等,在有效负载中,并在排名期间使用所有这些特性的组合