lucene.net使用プロセス


0、何がluceneですか?
   luceneは作業員が使うAPIで、sorのように持ってきたくないです。直接運行できます。luceneは今多くの言語を支持しています。Java、C〓、perlなどです。この文章はluceneの使用手順をc萶で説明します。luceneの使用は大きく分けると、索引を作成し、検索し、検索する。
1、インデックスの作成
Analyzer analyzer=new StandardAnalyzer(Version.LUCENE_CURRENT);  								Directory  directory = FSDirectory.GetDirectory(@"D:\project\index", false);							         // true:      false:  													//Directory directory = new RAMDirectory();//         ,         ,       ,       。 			//D:\project\index            											IndexWriter iwriter = new IndexWriter(directory, analyzer, true, new IndexWriter.MaxFieldLength(25000));     			string strdir = "D:\\project\\test007";
      //D:\\project\\test007            											 DirectoryInfo dir = new DirectoryInfo(strdir);

            if (dir.Exists)  
            {
                FileInfo[] files = dir.GetFiles();

                for (int i = 0; i < files.Length; i++)
                {
                    if (files[i].Exists)
                    {
                        
                        Console.WriteLine("path : " + files[i].FullName);
                        Document doc = new Document();
                         //  Document           ,                          						               string strLine;
                        FileStream aFile = files[i].OpenRead();
                        StreamReader sr = new StreamReader(aFile);
                       
                     
                        strLine = sr.ReadLine();
                       
                        char[] sepratorrr = { '\t' };
//      : name\t lily           													   // content\t i am a boy.(and so on)                        										 while (strLine !=null)
                        {
                            if (strLine == "")
                            {
                                strLine = sr.ReadLine();
                                continue;
                            } 
                            
                            string[] mywords = strLine.Split(sepratorrr);
                            Console.WriteLine(" filename :" + mywords[0] + " value : " + mywords[1]);
                            if (mywords[0] == "time"||mywords[0]=="fans")
                            {
                                Console.WriteLine("time flied");
                                doc.Add(new Field(mywords[0], mywords[1], Field.Store.YES, Field.Index.UN_TOKENIZED));
                                //time   fans                                        }
                            else
                            { 
                               doc.Add(new Field(mywords[0], mywords[1], Field.Store.YES, Field.Index.ANALYZED));
                                //                                      }

                             
                            strLine = sr.ReadLine();
                        }

                        iwriter.AddDocument(doc);
                        // doc       
                    }
                    else
                    {
                        Console.WriteLine("file is not exit: " + files[i].FullName);
                    }
                }

                Console.WriteLine(dir + " open  sucessfully");
            }
            else
                Console.WriteLine(dir + " the dir is not exits");
            //=============================================================================
            iwriter.Optimize();
            iwriter.Close();
 
 
2、検索検索
 
 IndexSearcher isearcher = new IndexSearcher(directory, true); // read-only=true

            Console.Write("inter a  serch key word : ");
            string key = Console.ReadLine();
            if (key != null)
            {

                BooleanClause.Occur[] flags = new BooleanClause.Occur[] {
                    BooleanClause.Occur.SHOULD, BooleanClause.Occur.SHOULD };

                Query query = MultiFieldQueryParser.Parse(key,new string[]{"name","content"},flags,analyzer);

                SortField[] sortOrder = { new SortField("time", true), new SortField("fans", SortField.LONG, true) }; //
                Sort sort = new Sort(sortOrder);//, SortField.STRING

                Hits hits = isearcher.Search(query, sort);
                // Hits hits = isearcher.Search(query);
                Console.WriteLine("  {0}     ", hits.Length());
                for (int i = 0; i < hits.Length(); i++)
                {

                    // Document hitDoc = isearcher.Doc(i);//handwriting error for my 1 day to debug
                    Document hitDoc = hits.Doc(i);

                    Console.Write(hitDoc.Get("name") + " " + hitDoc.Get("fans") + " " + hitDoc.Get("gender") + " " + hitDoc.Get("time"));
                    Console.WriteLine(hitDoc.Get("content"));


                }
            }

            isearcher.Close();