private TrieBinaryReader CreateTrieBinaryReader() { Stream stream = GetIndexStream(); BinaryReader binaryReader = new BinaryReader(stream); var trieBinaryReader = new TrieBinaryReader(binaryReader, _header); return(trieBinaryReader); }
public static int CreateIndexFile(this TrieBinaryReader instance, TrieIndexHeader header, TrieNode node, string path, int readBufferSizeInBytes) { Stream stream = new FileStream( path, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None, readBufferSizeInBytes, FileOptions.RandomAccess ); return(TrieIndexSerializer.Serialize(node, header, stream)); }
private SearchResult CreateResultFromNode(TrieBinaryReader trieBinaryReader, TrieNodeStructSearchResult node, string keyword, SearchOptions options) { var searchResult = new SearchResult(); if (node.Status == TrieNodeSearchResultType.NotFound || node.Status == TrieNodeSearchResultType.Unkown) { searchResult.ResultType = node.Status; return(searchResult); } string prefix = null; if (node.Status == TrieNodeSearchResultType.FoundStartsWith) { if (!options.SuggestWhenFoundStartsWith) { searchResult.ResultType = node.Status; return(searchResult); } prefix = keyword.Substring(0, node.LastFoundCharacterIndex - 1); } else if (node.Status == TrieNodeSearchResultType.FoundEquals) { //prefix = input.Keyword.Substring(0, input.Keyword.Length - 1); if (GetTailStream() == null) { prefix = keyword.Substring(0, keyword.Length - 1); } else { prefix = keyword; } } searchResult.ResultType = node.Status; searchResult.Items = trieBinaryReader.GetAutoCompleteNodes( node.LastFoundNodePosition, prefix, options.MaxItemCount, new List <string>(), GetTailStream() ).ToArray(); return(searchResult); }