searchform.cs

来自「KTDictSeg 简介: KTDictSeg 是由KaiToo搜索开发的一款基」· CS 代码 · 共 157 行

CS
157
字号
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Xml;
using SimpleSearch;
using SimpleSearch.News;
using System.Diagnostics;

namespace Demo.KTDictSegAnalyzer
{
    public partial class SearchForm : Form
    {
        public SearchForm()
        {
            InitializeComponent();
        }

        private void SearchForm_Load(object sender, EventArgs e)
        {
            try
            {
                Index.INDEX_DIR = System.IO.Path.GetFullPath(Index.INDEX_DIR);
                Index.CreateIndex(Index.INDEX_DIR);
                SearchPage searchPage = new SearchPage();
                webBrowserSearch.DocumentText = searchPage.GetStartPage();
            }
            catch (Exception e1)
            {
                MessageBox.Show(e1.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void insertNewsToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                FormInsert frmInsert = new FormInsert();
                frmInsert.ShowDialog();
            }
            catch (Exception e1)
            {
                MessageBox.Show(e1.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void rebuildToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                Index.Rebuild(Index.INDEX_DIR);
            }
            catch (Exception e1)
            {
                MessageBox.Show(e1.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

        }

        private void HtmlElement_OnSearch(Object sender, EventArgs e)
        {
            HtmlElement keywords = webBrowserSearch.Document.All["Keywords"];
            String text = keywords.GetAttribute("Value");
            List<TNews> news = Index.Search(Index.INDEX_DIR, text);

            SearchPage searchPage = new SearchPage();
            webBrowserSearch.DocumentText = searchPage.GetResultPage(news);

        }

        private void webBrowserSearch_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            HtmlElement searchButton = webBrowserSearch.Document.All["Search"];

            searchButton.Click += new HtmlElementEventHandler(HtmlElement_OnSearch);
        }

        private void batchInsertToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    FormBatchInsert frmBatchInsert = new FormBatchInsert();
                    frmBatchInsert.Show();

                    XmlDocument xmlDoc = new XmlDocument();
                    xmlDoc.Load(openFileDialog.FileName);
                    XmlNodeList nodes = xmlDoc.SelectNodes(@"News/Item");


                    Stopwatch watch = new Stopwatch();
                    Lucene.Net.Analysis.KTDictSeg.KTDictSegAnalyzer.Duration = 0;

                    DateTime old = DateTime.Now;
                    int count = 0;
                    int MaxCount = Math.Min(40000, nodes.Count);

                    long totalChars = 0;
                    Index.CreateIndex(Index.INDEX_DIR);
                    Index.MaxMergeFactor = 100;
                    Index.MinMergeDocs = 100;

                    foreach (XmlNode node in nodes)
                    {
                        String title = node.Attributes["Title"].Value;
                        DateTime time = DateTime.Parse(node.Attributes["Time"].Value);
                        String Url = node.Attributes["Url"].Value;
                        String content = node.Attributes["Content"].Value;

                        totalChars += title.Length + 8 + Url.Length + content.Length;


#if DEBUG
                        watch.Start();
#endif

                        Index.IndexString(Index.INDEX_DIR, Url, title,
                            time, content);
#if DEBUG
                        watch.Stop();
#endif

                        count++;
                        frmBatchInsert.Progress = count * 100 / MaxCount;

                        if (count >= MaxCount)
                        {
                            break;
                        }
                    }
#if DEBUG
                    watch.Start();
#endif
                    Index.Close();
#if DEBUG
                    watch.Stop();
#endif

                    TimeSpan s = DateTime.Now - old;
                    MessageBox.Show(String.Format("插入{0}行数据,共{1}字符,用时{2}秒 分词用时{3}秒",
                        MaxCount, totalChars, watch.ElapsedMilliseconds / 1000 + "." + watch.ElapsedMilliseconds % 1000,
                        Lucene.Net.Analysis.KTDictSeg.KTDictSegAnalyzer.Duration / 1000 + "." +
                        Lucene.Net.Analysis.KTDictSeg.KTDictSegAnalyzer.Duration % 1000), 
                        "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                catch (Exception e1)
                {
                    MessageBox.Show(e1.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }
    }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?