Lucene 分字

来源:互联网 发布:小黄鸡peeper软件下载 编辑:程序博客网 时间:2024/05/22 09:42


protected void BtnTable_Click(object sender, EventArgs e)
        {
            string queryString ="select top " + txttoprow.Value + " projectname,_city from project";


            System.Diagnostics.Stopwatch stopwatch = new Stopwatch();
            using (SqlConnection connection =
                       new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings[MyConst.connectionStr].ConnectionString))
            {
                SqlCommand command =
                    new SqlCommand(queryString, connection);
                connection.Open();

                SqlDataReader reader = command.ExecuteReader();
                IDataRecord record = null;
                // Call Read before accessing data.
                while (reader.Read())
                {
                    stopwatch.Start();
                    record = (IDataRecord)reader;
                    SearchFromIndexData(record[0].ToString(), record[1].ToString());
                }
                // Call Close when done reading.
                reader.Close();
            }
           
            stopwatch.Stop();
            //停止监视          
            TimeSpan timeSpan = stopwatch.Elapsed;
            //获取总时间         
            double hours = timeSpan.TotalHours;
            //小时         
            double minutes = timeSpan.TotalMinutes;
            //分钟           
            double seconds = timeSpan.TotalSeconds;
            //秒数           
            lbltime.Text = (timeSpan.TotalMilliseconds / 1000).ToString();  //  毫秒数
        }
        protected void BtnSearch_Click(object sender, EventArgs e)
        {

            SearchFromIndexData(txtSplit.Value.ToString(), txtCity.Value.ToString());

        }

        protected string LuceneIndexPath()
        {
            //INDEX_STORE_PATH 为索引存储目录
            return Server.MapPath("LuceneIndex");
        }

        //建立索引
        public IndexWriter CreateIndex()
        {
            IndexWriter writer = null;
            try
            {
                if (System.IO.Directory.Exists(LuceneIndexPath()))
                {
                    System.IO.Directory.Delete(LuceneIndexPath(), true);
                }

                writer = new IndexWriter(FSDirectory.Open(LuceneIndexPath()), new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30), IndexWriter.MaxFieldLength.UNLIMITED);
                int i = 0;
                if (!int.TryParse(txtSelectCount.Value, out i))
                {
                    Response.Write("<script>alert('建立索引行数不正确!')</script>");
                }
                DataTable dt = MySQLHelp.ExecuteSet("select top " + txtSelectCount.Value + " projectname,_city from project").Tables[0];
                for (int j = 0; j < dt.Rows.Count; j++)
                {
                    Document document = new Document();
                    document.Add(new Field("projectname", dt.Rows[j]["projectname"].ToString(), Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.WITH_POSITIONS_OFFSETS));
                    document.Add(new Field("city", dt.Rows[j]["_city"].ToString(), Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.WITH_POSITIONS_OFFSETS));
                    writer.AddDocument(document);
                }
                writer.Optimize();
                writer.Dispose();
                lblCreatResult.Text = "建立索引成功";
            }
            catch (Exception e)
            {
                lblCreatResult.Text = e.ToString();
            }
            return writer;
        }


        /// <summary>
        /// 从索引库中检索关键字
        /// </summary>
        private void SearchFromIndexData(string projectname, string city)
        {
            var ver = Lucene.Net.Util.Version.LUCENE_30;
            Directory indexDirectory = FSDirectory.Open(new System.IO.DirectoryInfo(LuceneIndexPath()));
            Analyzer analyzer = new StandardAnalyzer(ver);
            IndexSearcher searcher = null;
            //List<Article> list;           
            int recCount = 0;
            try
            {
                searcher = new IndexSearcher(indexDirectory, true);
                BooleanQuery booleanQuery = new BooleanQuery();
                //MultiFieldQueryParser parser = new MultiFieldQueryParser(ver, new string[] { "projectname", "city" }, analyzer);
                //Query query = parser.Parse(word);
                //PhraseQuery query = new PhraseQuery();
                //query.Add(new Term("projectname", word));
                Query queryprojectname = new QueryParser(ver, "projectname", analyzer).Parse(projectname);
                Query querycity = new QueryParser(ver, "city", analyzer).Parse(city);

                booleanQuery.Add(queryprojectname, Occur.MUST);
                booleanQuery.Add(querycity, Occur.MUST);

                TopDocs ts = searcher.Search(booleanQuery, null, 10000);//执行搜索,获取查询结果集对象
                recCount = ts.TotalHits;//获取命中的文档个数
                ScoreDoc[] hits = ts.ScoreDocs;//获取命中的文档信息对象

                foreach (var item in hits)
                {
                    namelist.Add(searcher.Doc(item.Doc).Get("projectname"));
                }
            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
                if (searcher != null)
                {
                    searcher.Dispose();
                }
            }

        }

        public static string[] SplitWords(string content)
        {
            List<string> strList = new List<string>();
            Analyzer analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30);
            TokenStream tokenStream = analyzer.TokenStream("", new System.IO.StringReader(content));
            Lucene.Net.Analysis.Token token = null;
            //Token t = ts.next(); 
            while (tokenStream.IncrementToken())
            {
                AttributeSource.State ta = tokenStream.CaptureState();
            }

            return strList.ToArray();
        }

0 0
原创粉丝点击