/// <summary> /// Only get the word step doc index. /// </summary> /// <param name="word"></param> /// <param name="filePositionList"></param> /// <param name="totalDocs"></param> /// <param name="dbProvider"></param> /// <param name="maxReturnCount"></param> /// <returns></returns> internal Hubble.Core.Index.WordIndexReader GetWordIndexWithWordStepDocIndex(string word, WordFilePositionList filePositionList, int totalDocs, Data.DBProvider dbProvider, int maxReturnCount) { List <WordStepDocIndex.IndexFileInfo> indexFileInfoList = new List <WordStepDocIndex.IndexFileInfo>(); //StepDocIndex of all index files bool simple = _IndexMode == Hubble.Core.Data.Field.IndexMode.Simple; long wordCountSum = 0; foreach (FilePosition filePosition in filePositionList.FPList) { IDXFile idxFile = GetIDXFile(filePosition.Serial); if (idxFile == null) { continue; } int count; long indexPosition; List <Hubble.Core.Entity.DocumentPosition> stepDocIndex = idxFile.GetStepDocIndex(filePosition.Position, filePosition.Length, out count, out indexPosition); indexFileInfoList.Add(new WordStepDocIndex.IndexFileInfo(stepDocIndex, new FilePosition(filePosition.Serial, indexPosition, (int)(filePosition.Length - (indexPosition - filePosition.Position) - sizeof(int))), //Subtract last 4 bytes for last doc id and Subtract stepdocindex length count)); wordCountSum += count; } int relDocCount = (int)wordCountSum; //if (maxReturnCount >= 0) //{ // if (wordCountSum > maxReturnCount) // { // relDocCount = maxReturnCount; // } //} WordStepDocIndex wordStepDocIndex = new WordStepDocIndex(indexFileInfoList, wordCountSum, relDocCount, simple); return(new WordIndexReader(word, wordStepDocIndex, totalDocs, dbProvider, _IndexFileProxy, maxReturnCount)); }
internal Hubble.Core.Index.WordIndexReader GetWordIndex(string word, WordFilePositionList filePositionList, int totalDocs, Data.DBProvider dbProvider, int maxReturnCount) { WordDocumentsList docList = new WordDocumentsList(); bool simple = _IndexMode == Hubble.Core.Data.Field.IndexMode.Simple; if (maxReturnCount < 0) { foreach (FilePosition filePosition in filePositionList.FPList) { IDXFile idxFile = GetIDXFile(filePosition.Serial); if (idxFile == null) { continue; } WordDocumentsList wdl = idxFile.GetDocList(filePosition.Position, filePosition.Length, -1, simple); if (filePositionList.Count == 1) { docList = wdl; } else { docList.AddRange(wdl); docList.WordCountSum += wdl.WordCountSum; } } } else { int remain = maxReturnCount; foreach (FilePosition filePosition in filePositionList.FPList) { IDXFile idxFile = GetIDXFile(filePosition.Serial); if (idxFile == null) { continue; } WordDocumentsList wdl = idxFile.GetDocList(filePosition.Position, filePosition.Length, remain, simple); if (filePositionList.Count == 1) { docList = wdl; } else { docList.AddRange(wdl); docList.WordCountSum += wdl.WordCountSum; docList.RelDocCount += wdl.RelDocCount; } remain -= wdl.Count; } } return(new WordIndexReader(word, docList, totalDocs, dbProvider)); }