示例#1
0
        public SearchEngine(SearchEngineConfig config)
        {
            mConfig      = config;
            mQueryParser = new SimpleQueryParser(new QueryParserConfig
            {
                TextSegmenter = config.TextSegmenter,
            });

            mRetriever = new InexactTopKRetriever(new RetrieverConfig
            {
                PostingListStore   = config.PostingListStore,
                UrlFileStore       = config.UrlFileStore,
                InvertedIndexStore = config.InvertedIndexStore,
            }, ResultSize);

            var rankerConfig = new RankerConfig
            {
                PostingListStore   = config.PostingListStore,
                UrlFileStore       = config.UrlFileStore,
                InvertedIndexStore = config.InvertedIndexStore,
            };

            mRanker    = new IntegratedRanker(rankerConfig);
            mProRanker = new QueryTermProximityRanker(rankerConfig);

            mLogger = new RuntimeLogger(Path.Combine(config.LogDirectory, "SearchEngine.Log"), true);
        }
示例#2
0
        static ConfigurationManager()
        {
            SearchEngineConfig searchEngineConfig = (SearchEngineConfig)System.Configuration.ConfigurationManager.GetSection("searchEngine");

            foreach (SearchEngineElement instance in searchEngineConfig.SearchEngines)
            {
                SearchEngines.Add(new SearchEngine
                {
                    Name       = instance.Name,
                    Address    = instance.Address,
                    QueryParam = instance.QueryParam,
                    TagRegex   = instance.TagRegex,
                    ValueRegex = instance.ValueRegex
                });
            }
        }
示例#3
0
        static void Main(string[] args)
        {
            var arguments = Parser.ParseArguments <SearchArguments>(args);

            var config = new SearchEngineConfig
            {
                UrlFileStore       = new UrlFileStore(),
                InvertedIndexStore = new InvertedIndexStore(),
                PostingListStore   = new PostingListStore(),
                LogDirectory       = arguments.LogDir,
            };

            var engine       = new SearchEngine(config);
            var urlFileStore = config.UrlFileStore;

            while (true)
            {
                Console.WriteLine("Search:");
                var query = Console.ReadLine();

                var results = engine.Search(query);

                var count = 0;

                foreach (var result in results)
                {
                    var urlFile = urlFileStore.GetUrlFile(result.UrlFileId);

                    Console.WriteLine("{0}: {1} ({2}, {3})", result.UrlFileId, urlFile.Url, result.Score, result.ProScore);

                    if (result.WordPositions == null)
                    {
                        Console.WriteLine("  " + urlFile.TextContent.Substring(0, 50).Replace("\r", "").Replace("\n", "  "));
                    }
                    else
                    {
                        var orderPos   = result.WordPositions.OrderBy(o => o.Position);
                        var minWordPos = orderPos.First();
                        var minPos     = Math.Max((int)minWordPos.Position - 50, 0);
                        var maxPos     = orderPos.Last();

                        var content = urlFile.TextContent;

                        Console.WriteLine("  "
                                          + content.Substring(minPos,
                                                              Math.Min((int)maxPos.Position - minPos + maxPos.Word.Length + 50, content.Length - minPos))
                                          .Replace("\r", "").Replace("\n", "  "));
                    }

                    Console.WriteLine("");

                    count++;

                    if (count % 10 == 0)
                    {
                        Console.WriteLine("Input N to View Next Page, Otherwise Exit.");
                        var cmd = Console.ReadLine();
                        if (cmd != "N")
                        {
                            break;
                        }
                    }
                }

                Console.WriteLine();
            }
        }