51Testing软件测试论坛

标题: 应用lucene.net进行搜索测试 [打印本页]

作者: 小文0111    时间: 2018-4-25 16:15
标题: 应用lucene.net进行搜索测试
1: 搜索关键字
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.IO;
  5. using Lucene.Net.Analysis;
  6. using Lucene.Net.Documents;
  7. using Lucene.Net.Index;
  8. using Lucene.Net.QueryParsers;
  9. using Lucene.Net.Search;
  10. using Lucene.Net.Analysis.Cn;

  11. namespace SearchTest
  12. {
  13.     class SearchTest
  14.     {
  15.         private IndexSearcher searcher = null;
  16.         private Analyzer analyser = null;

  17.         public SearchTest()
  18.         {
  19.             analyser = new ChineseAnalyzer();
  20.             searcher = new IndexSearcher(IndexReader.Open("c:\\index"));
  21.         }

  22.         public Hits search(String queryString, string field)
  23.         {
  24.             if (searcher != null)
  25.             {
  26.                 try
  27.                 {
  28.                     QueryParser parser = new QueryParser(field,analyser);
  29.                     parser.SetOperator(QueryParser.DEFAULT_OPERATOR_AND);
  30.                     Query query = parser.Parse(queryString);
  31.                     return searcher.Search(query);
  32.                 }
  33.                 catch { }
  34.             }
  35.             return null;
  36.         }

  37.         static void Main(string[] args)
  38.         {
  39.             SearchTest searcher = new SearchTest();
  40.             DateTime start = DateTime.Now;
  41.             Hits h = searcher.search("中国", "content");
  42.             DateTime end = DateTime.Now;
  43.             long time = end.Ticks - start.Ticks;
  44.             Console.WriteLine("总共耗时:{0}毫秒",Convert.ToString(time));
  45.             Console.WriteLine("总共找到{0}个文件",h.Length());
  46.         }
  47.     }
  48. }
复制代码

由于搜索是一种注重效率的行为,因此将其构建成一个轻量级的对象能节省不少内存和时间上的开销.在上面的
代码中,内置了一个IndexSearcher对象,并调用其search方法来检索.
在代码最后的main函数中,输入了关键字"中国",搜索的结果是
总共耗时:1406250毫秒
总共找到22个文件
请按任意键继续. . .

2:下面为了性能上的提高,我们来用多线程进行搜索
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using Lucene.Net.Analysis.Cn;
  5. using Lucene.Net.Index;
  6. using Lucene.Net.QueryParsers;
  7. using Lucene.Net.Search;
  8. using System.Threading;


  9. namespace MuiltiSearch
  10. {
  11.     class MultiSearch
  12.     {

  13.         static void Main(string[] args)
  14.         {
  15.             for (int i = 0; i < 50; i++)
  16.             {
  17.                 SearchThread s = new SearchThread();
  18.                 Thread thread=new Thread(s.run);
  19.                 thread.Start();
  20.             }
  21.         }

  22.         }

  23.    public  class SearchThread
  24.    {
  25.         public void run()
  26.         {
  27.             Thread.Sleep(10);
  28.             IndexSearcher searcher = new IndexSearcher(IndexReader.Open("c:\\index"));
  29.             QueryParser parser = new QueryParser("content", new ChineseAnalyzer());
  30.             parser.SetOperator(QueryParser.DEFAULT_OPERATOR_AND);
  31.             Query query = parser.Parse("中国");
  32.             DateTime start = DateTime.Now;

  33.             Hits h = searcher.Search(query);

  34.             DateTime end = DateTime.Now;
  35.             long time = start.Ticks - end.Ticks;

  36.             Console.WriteLine("用时{0}毫秒", time);
  37.         }
  38.     }
  39. }
复制代码







欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2