`
jianzong2000
  • 浏览: 56071 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论
阅读更多

mg4j是个类似于lucene的全文检索包,发现网上的资料很少,稍微总结下心得。
1、DocumentSequence:A sequence of documents
主要包含方法

DocumentFactory    factory()

DocumentIterator    iterator()

2、it.unimi.di.big.mg4j.document. DocumentIterator[z1]: An iterator over documents

主要方法

Document nextDocument()

3、AbstractDocumentSequence:An abstract, safely closeable implementation of a document sequence

继承自DocumentSequence。主要子类有CompositeDocumentSequence,该子类的DocumentFactory为CompositeDocumentFactory。

4、lDocumentCollection:A collection of documents

继承自DocumentSequence和AbstractDocumentSequence。主要子类有StringArrayDocumentCollection、JdbcDocumentCollection、ConcatenatedDocumentCollection等。

StringArrayDocumentCollection的DocumentFactory为IdentityDocumentFactory。

IntArrayDocumentCollection的DocumentFactory为IntArrayDocumentFactory

主要包含方法

Document  document(long index)

lDocument: An indexable document

存储field。主要子类为IdentityDocumentFactory. Document,CompositeDocument。

5、CompositeDocument是从索引库中取得document格式。

主要方法有

Object content(int field),注意不同的document返回的Object类型不同。

WordReader wordReader(int field)

6、lDocumentCollectionBuilder:An interface for classes that can build collections during the indexing process

将DocumentCollection生成以.collection结尾的文件。在索引过程中生成DocumentCollection,主要是ConcatenatedDocumentCollection。以便从索引库中取得原始的document,即CompositeDocument。

7、lDocumentFactory: A factory parsing and building documents of the same type

根据不同的输入源生成document。主要子类有CompositeDocumentFactory、IdentityDocumentFactory、IntArrayDocumentFactory。

CompositeDocumentFactory用于组合不同的DocumentFactory,生成的是CompositeDocument。

主要方法有

// Returns the document obtained by parsing the given byte stream.

//根据传入的rawContent和metadata生成一个document

Document getDocument(InputStream rawContent, Reference2ObjectMap<Enum<?>,Object> metadata)

8、QueryBuilderVisitor:A visitor for a composite query

访问者模式中的Visitor,主要子类为DocumentIteratorBuilderVisitor

主要有方法

T visit( Term node ) throws QueryBuilderVisitorException;

T visit( Prefix node ) throws QueryBuilderVisitorException;

boolean visitPre( And node ) throws QueryBuilderVisitorException;

boolean visitPre( Or node ) throws QueryBuilderVisitorException;



// visitPost中会调用AndDocumentIterator.getInstance

boolean visitPost( And node ) throws QueryBuilderVisitorException;

9、it.unimi.di.big.mg4j.query.nodes.Query: A node of a composite representing a query

主要子类有Align、AND、OR、MultiTerm、Term、Weight等。

方法有

public <T> T accept( QueryBuilderVisitor<T> visitor ) throws QueryBuilderVisitorException;

10、it.unimi.di.big.mg4j.search.DocumentIterator: An iterator over documents (pointers) and their intervals

子类主要有AlignDocumentIterator 、AndDocumentIterator、OrDocumentIterator等。

主要包含方法

long nextDocument()

boolean       mayHaveNext()

11、it.unimi.di.big.mg4j.index. IndexIterator: An iterator over an inverted list.

继承自DocumentIterator。主要方法有

// Returns the count, that is, the number of occurrences of the term in the current document.

int count()

// Returns the frequency, that is, the number of documents that will be returned by this iterator

long frequency()

// Returns the index over which this iterator is built

Index index()

//Returns the next position at which the term appears in the current document

nextPosition()

12、lIndexBuilder

run-> Scan.run-> Paste.run、Concatenate.run[z2]à DiskBasedIndex.getInstance->生成QuasiSuccinctIndex

13、Scan

run-> new Scan[ numberOfIndexedFields ]-> documentSequence .iterator()->

document.content、document.wordReader->scan[ i ].processDocument->sizes. writeGamma并生成termMap-> scan[ i ].dumpBatch()、scan[ i ].openSizeBitStream();、accumulator[ i ].writeData();

14、JdbcDocumentCollection[z3]

iterator()返回JdbcDocumentIterator-> nextDocument()

->CompositeDocumentFactory.getDocument( getStreamFromResultSet( rs, title ), metadata( index++, title ) )

-> new CompositeDocument( metadata, rawContent )

其中currDocument = documentFactory[ 0 ].getDocument( rawContent, metadata );

15、CompositeDocumentFactory

该Factory的numberOfFields为遍历DocumentFactory[]所有的numberOfFields之和。factoryIndex[ ]的长度与numberOfFields相同。初始化代码为

for( int i = 0; i < this.documentFactory.length; i++ ) {

        for( int j = 0; j < documentFactory[ i ].numberOfFields(); j++ ) {

            fieldType[ n ] = documentFactory[ i ].fieldType( j );

            //例如numberOfFields都为10,则存储的值为

0=0;1=0; ……;9=0

10=1;11=1; ……;19=1

factoryIndex[ n ] = i;

//存储的值为

0=0;1=1; ……;9=9

10=0;11=1; ……;19=9

            originalFieldIndex[ n ] = j;

            n++;

        }

}





document.content( indexedField[ i ] )即CompositeDocument. content( final int field )

       //从factoryIndex中找到与field相对应的factory,并调用factory.getDocument方法得到currDocument

if ( currFactory < factoryIndex[ field ] ) {

                while( currFactory < factoryIndex[ field ] ) {

                    rawContent.reset();

                    currFactory++;

                }

                if ( currDocument != null ) currDocument.close();

                currDocument = documentFactory[ currFactory ].getDocument( rawContent, metadata );

          }

//从originalFieldIndex中得到currDocument对应的field

        currField = field;

        return currDocument.content( originalFieldIndex[ field ] );

16、Index:An abstract representation of an index

对应一个字段。

lIndexIterator: An iterator over an inverted list

是it.unimi.di.big.mg4j.search.DocumentIterator的子类。检索返回值使用。

17、简单term检索流程

query.accept(QueryBuilderVisitor)->select. accept(QueryBuilderVisitor)->Term. accept(QueryBuilderVisitor)-> visitor.visit( this )-> DocumentIteratorBuilderVisitor.vistor(Term)

if ( node.termNumber != -1 ) {

return curr.top().documents( node.termNumber ).weight( weight() );

}

//调用当前Index.documents方法取得IndexIterator

return curr.top().documents( node.term ).weight( weight() );

18、DocumentIteratorBuilderVisitor

DocumentIteratorBuilderVisitor(

//index的map。key为自定义的index名字,value为Index。

final Object2ReferenceMap<String,Index> indexMap,

//没有指定查询的Index时的默认Index

final Reference2ReferenceMap<Index,Object> index2Parser,

final Index defaultIndex,

final int limit ) {

    curr = new ObjectArrayList<Index>();

    curr.push( defaultIndex );

}

// visitPre方法

public boolean visitPre( final Select node ) throws QueryBuilderVisitorException {

        curr.push( indexMap.get( node.index.toString() ) );

        return true;

}

// visitPost方法

public DocumentIterator visitPost( final Select node, final DocumentIterator subNode ) {

        curr.pop();

        return subNode;

    }

 

分享到:
评论

相关推荐

    Mg4j使用

    阅读这份手册可以帮助用户更好地理解和应用Mg4j,解决实际开发中遇到的问题。 总之,Mg4j是一个强大的信息检索框架,其灵活性和高性能使其成为处理大规模文本数据的理想选择。通过理解其核心特性和掌握基本操作,...

    MG150J7KS50 英文手册.pdf

    4. 增强型模式IGBT:MG150J7KS50是一种N沟道增强型IGBT,需要正向门极电压才能导通。 5. 高速型IGBT:文中提及MG150J7KS50为高速型IGBT,在逆变器阶段能够快速转换状态,这对于要求快速开关频率的应用非常重要。 6...

    华为MG323&MC323开发板原理图

    接口部分如J1、J4、J8、J10和J11等,包括了各种类型的接口,比如DC JACK和USB接口,这些接口允许开发板与其他设备或电源连接。开关SW3和SWPUSHBUTTON-DPDT等元件用于用户交互,控制电路的通断。 原理图中还有各种...

    用户手册:EFR32MG12 Breakout Board (开源硬件)

    - **MG12 评估板 v1 元件放置**:详细说明了元件的位置布局,便于理解和使用。 - **外部 SEGGER J-LINK 调试器选项**:除了集成的调试功能外,还支持外部 J-Link 调试器,提供更高级的调试选项。 #### 4. EFR32MG12...

    金钟 T-BXB-××-MG-T(P)称重传感器数据手册.pdf

    金钟T-BXB-××-MG-T(P)称重传感器是一种...此外,由于文档内容是通过OCR扫描出的部分文字,可能存在识别错误或漏识别的情况,因此在理解手册内容时需要结合上下文和常识进行必要的修正和推断,以保证信息的准确性。

    论文研究 - 储量的潜在技术利用

    在麻疯树种子中确定了四种主要脂肪酸:油酸,棕榈酸,硬脂酸,棕榈油酸和油酸脂肪酸约占油含量的70%。 油酸在J. macrocarpa种子中最丰富,而没有棕榈油酸。 主要具有不饱和脂肪酸的种子是生物柴油行业的理想选择。...

    STM32-MG323单片机开发套件GPRS测试流程

    - **文档扫描识别错误**: 由于文档可能是通过OCR扫描转换成文本的,因此可能会出现一些文字识别错误或漏识别的情况,需要读者在理解内容时进行适当调整,确保理解的准确性。 #### 7. 测试环境 - 在开始测试前,确保...

    求解迷宫问题-(c语言-很详细哦).doc

    if (mg[i][j] == 0) find = 1; // 如果找到通道,标记为已访问并继续 } if (find == 1) { // 找到下一个可走方块 Stack[top].di = di; // 修改栈顶元素的方向 top++; // 下一个可走方块入栈 Stack[top].i = i...

    _重症肌无力的认识发展史(医学史话);.docx

    近年来,对MG的理解进一步扩展到包括其他抗神经肌肉接头蛋白的自身免疫反应,如抗MuSK抗体和LRP4抗体相关的MG亚型。这些发现不仅丰富了我们对疾病机制的认识,也为个体化治疗提供了可能。 总的来说,重症肌无力的...

    _重症肌无力的认识发展史(医学史话);.docx

    随后的两个世纪,MG的研究进入相对沉寂期,直到19世纪,随着法国和德国在肌肉疾病领域的深入研究,一批杰出的神经病学家如Duchenne、Aran、Charcot、Marie和Déjérine等人的工作才再次引起了对MG的关注。...

    离散数学实验4:欧拉图的判定并输出所有欧拉(回)路

    在本实验“离散数学实验4:欧拉图的判定并输出所有欧拉(回)路”中,我们将聚焦于图论的一个重要概念——欧拉路径和欧拉回路。 欧拉图是指一个无向图,其中每个顶点的度数(即与该顶点相连的边数)都是偶数。如果...

    gi,mG及其应用 (2000年)

    \[ mG = \sum (g_i \cdot g_j \cdot \ldots)^{0.5} \] 其中,\( g_i \) 和 \( g_j \) 分别表示分子中两个原子的gi值。 - **阶次**:mG是一个系列指标,包括0阶指数(\( 0G \))、1阶指数(\( 1G \))等,具体计算...

    江苏省邳州市宿羊山初级中学2016届九年级物理上学期第5周周练试题无答案

    海宝对车厢的压力F=G=mg=3.0×10^3kg×10N/kg=3×10^4N,压强p=F/S=3×10^4N/1m^2=3×10^4Pa。汽车牵引力做功W=fs=2000N×30×60m=3.6×10^6J。汽车功率P=W/t=3.6×10^6J/1800s=2000W。 10. 钢板的重力G=mg=2.0×10...

    八年级物理--功和功率计算题练习.pdf

    10. 有用功为提升砖块的功,W有 = Gh = 500N × 4m = 2000J。功率 P = W有 / t = 2000J / 20s = 100W。 11. 小明上楼做功 W = Gh = (500N + 15N) × 3m = 1545J。功率 P = W / t = 1545J / 20s = 77.25W。 12. ...

    单片机学习板 电路图

    LM324是一种通用运算放大器,电路图中显示了四个独立的放大器单元,可用于信号放大、滤波等多种功能。 #### PWM调制(PWM) PWM(脉冲宽度调制)是控制直流电机速度、LED亮度等的一种常用技术。电路图中的PWM_IN和...

    56.(leaflet篇)leaflet百度坐标转天地图坐标(bd09转大地2000).zip

    要进行坐标转换,我们需要理解它们之间的差异,并找到转换算法。在JavaScript中,我们可以编写函数来实现这个转换。以下是一个简单的示例: ```javascript function bd09ToCGCS2000(lng, lat) { var x = lng - 0....

    C语言实现图的邻接矩阵存储操作

    printf("%d",MG.arcs[i][j]); } printf("\n"); } } //主函数 int main(void){ MGraph MG; create_MG(&MG); print_MG(MG); return 0; } ``` 知识点 * 邻接矩阵的定义和存储方式 * 使用C语言实现图的邻接...

    迷宫 c语言迷宫问题

    ### 知识点一:迷宫问题背景及定义 在计算机科学中,迷宫问题是一种经典的搜索问题。题目描述了一个由0和1组成的m×n矩阵来表示迷宫,其中0表示可通行...通过理解和掌握这些知识点,可以有效地解决类似的迷宫问题。

    湖南省湘潭市凤凰中学2015届高考物理一轮复习 培训检测试题 功能关系 能量守恒定律(二)

    在B点,弹簧的弹力应该是支持小球的向心力,即 F = mg + mv^2/R,因此C和D都不正确。 第二题中,小球从A点水平飞出,经过B点进入光滑圆弧轨道。我们需要计算B点与A点的水平距离x,圆弧BC的圆心角θ,以及小球在C点...

    大学生物工程专业《大学物理(一)》月考试题B卷附答案.pdf

    6、棒的转动惯量J=ml²/3,角加速度α=mg/(2J),释放时角加速度α1=mg/(2J),水平位置时重力矩为0,角加速度α2=0。 7、动量定理内容:物体动量的变化等于作用在其上的合外力的冲量;数学表达式:Δp=Ft;动量守恒...

Global site tag (gtag.js) - Google Analytics