using System;
using System.Collections.Generic;
using System.Text;
using Lucene.Net;
using Lucene.Net.Analysis;
using Lucene.Net.Analysis.Standard;
using Lucene.Net.Documents;
using Lucene.Net.Index;
using Lucene.Net.QueryParsers;
using Lucene.Net.Search;
using Lucene.Net.Store;
using Lucene.Net.Util;
namespace ConsoleApplication1.Lucene
{
public class GoTest
{
public static void Main(){
LuceneTest ot=new LuceneTest();
Console.ReadLine();
}
}
public class LuceneTest
{
private const string FieldName = "name";
private const string FieldValue = "value";
private Directory directory = FSDirectory.GetDirectory(System.IO.Path.Combine(System.Environment.CurrentDirectory,"indexfiles"), true);
//private Directory directory = new RAMDirectory();
private Analyzer analyzer = new StandardAnalyzer();
public LuceneTest()
{
Index();
Search();
}
private void Index()
{
IndexWriter writer = new IndexWriter(directory, analyzer, true);
writer.SetMaxFieldLength(1000);
for (int i = 1; i <= 100; i++)
{
Document document = new Document();
document.Add(new Field(FieldName, "name" + i, Field.Store.YES, Field.Index.UN_TOKENIZED));
document.Add(new Field(FieldValue, "Hello, World!", Field.Store.YES, Field.Index.TOKENIZED));
writer.AddDocument(document);
}
writer.Optimize();
writer.Close();
}
private void Search()
{
//Query query = MultiFieldQueryParser.Parse(new string[]{"name*"}, new string[] { FieldName, FieldValue }, analyzer);
//Query query1 = new TermQuery(new Term(FieldValue, "name1"));
Query query1 = new WildcardQuery(new Term(FieldName, "name*"));
IndexReader reader = IndexReader.Open(directory);
IndexSearcher searcher = new IndexSearcher(reader);
Hits hits = searcher.Search(query1);
Console.WriteLine("符合条件记录:{0}; 索引库记录总数:{1}", hits.Length(), searcher.Reader.NumDocs());
for (int i = 0; i < hits.Length(); i++)
{
int docId = hits.Id(i);
string name = hits.Doc(i).Get(FieldName);
string value = hits.Doc(i).Get(FieldValue);
float score = hits.Score(i);
Console.WriteLine("{0}: DocId:{1}; Name:{2}; Value:{3}; Score:{4}",
i + 1, docId, name, value, score);
}
searcher.Close();
}
}
}
