Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 3
0
        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);
        }