Query
这是一个抽象类,他有多个实现,比如 TermQuery, BooleanQuery, PrefixQuery. 这个类的目的是把用户输入的查询字符串封装成 Lucene 能够识别的 Query。
Term
Term 是搜索的基本单位,一个 Term 对象有两个 String 类型的域组成。生成一个 Term 对象可以有如下一条语句来完成:Term term = new Term(“fieldName”,”queryWord”); 其中第一个参数代表了要在文档的哪一个 Field 上进行查找,第二个参数代表了要查询的关键词。
TermQuery
TermQuery 是抽象类 Query 的一个子类,它同时也是 Lucene 支持的最为基本的一个查询类。生成一个 TermQuery 对象由如下语句完成: TermQuery termQuery = new TermQuery(new Term(“fieldName”,”queryWord”)); 它的构造函数只接受一个参数,那就是一个 Term 对象。
IndexSearcher
IndexSearcher 是用来在建立好的索引上进行搜索的。它只能以只读的方式打开一个索引,所以可以有多个 IndexSearcher 的实例在一个索引上进行操作。
Hits
Hits 是用来保存搜索的结果的。
//索引文件路径,我们可以从表中获取它,在这里我们直接给出
string INDEX_FILE_PATH = string.Empty;
INDEX_FILE_PATH = @"C:\wwwroot\Test\20120510_634722698826410118";
//IndexSearcher核心搜索类,以只读方式打开索引
IndexSearcher searcherindex = new IndexSearcher(INDEX_FILE_PATH);
Analyzer analyzer = new StopAnalyzer();//创建一个分析器
QueryParser query = new QueryParser("indexcontent", analyzer);
Query q = query.Parse(strkey);
//搜索类的搜索方法,接收单个query对象作为参数,并返回一个hits对象(该对象是一个存放指针的简单容器)
Hits searchhit = searcherindex.Search(q);
DataTable newdt = new DataTable();
if(searchhit.Length()>0)
{
//创建列
newdt.Columns.Add("NewsID");
newdt.Columns.Add("NewsTitle");
newdt.Columns.Add("NewsSummary");
DataRow dr = null;//创建一个行对象,但不实例化
for (int i = 0; i < searchhit.Length(); i++)
{
//加载创建时所添加到document对象里的某条记录
Document doc = searchhit.Doc(i);
dr = newdt.NewRow();//不断实例化这个对象
//将整条记录所有字段全部读取出来
dr["NewsID"] = doc.Get("pkid").ToString();
dr["NewsTitle"] = doc.Get("title").ToString();
dr["NewsSummary"] = doc.Get("summary").ToString();
newdt.Rows.Add(dr);//将当前对象添加到表里
dr.AcceptChanges();
}
}
return newdt;