Lucene学习笔记3--建立多个域的查询

/* 创建一个搜索,搜索刚才创建的目录下的索引 */
IndexSearcher indexSearcher = new IndexSearcher(path);

/* 在这里我们只需要搜索一个目录 */
IndexSearcher indexSearchers[] = {indexSearcher};

/* 我们需要搜索两个域ArticleTitle, ArticleText里面的内容 */
String[] fields = { ArticleTitle, ArticleText, ArticleTime };

/*
* 下面这个表示要同时搜索这两个域,而且只要一个域里面有满足我们搜索的内容就行
* BooleanClause.Occur[]数组,它表示多个条件之间的关系,BooleanClause.Occur.MUST表示and,
* BooleanClause.Occur.MUST_NOT表示not,BooleanClause.Occur.SHOULD表示or.
* 1、MUST和MUST表示“与”的关系,即“并集”。
* 2、MUST和MUST_NOT前者包含后者不包含。
* 3、MUST_NOT和MUST_NOT没意义
* 4、SHOULD与MUST表示MUST,SHOULD失去意义;
* 5、SHOUlD与MUST_NOT相当于MUST与MUST_NOT。
* 6、SHOULD与SHOULD表示“或”的概念
*/
BooleanClause.Occur[] clauses = { BooleanClause.Occur.SHOULD,BooleanClause.Occur.SHOULD, BooleanClause.Occur.SHOULD };

Analyzer analyzer = new IK_CAnalyzer();
/*
* MultiFieldQueryParser表示多个域解析, 同时可以解析含空格的字符串,如果我们搜索"上海 中国"
*/
Query multiFieldQuery = MultiFieldQueryParser.parse(keywords, fields,clauses, analyzer);

/* Multisearcher表示多目录搜索,在这里我们只有一个目录 */
MultiSearcher searcher = new MultiSearcher(indexSearchers);
// 多条件搜索
BooleanQuery multiQuery = new BooleanQuery();

multiQuery.add(multiFieldQuery, BooleanClause.Occur.SHOULD);

Sort sort = new Sort(ArticleTime);// 排序
/* 开始搜索 */
Hits h = searcher.search(multiQuery, sort);

String highTitle=""; 
String highText="";

猜你喜欢

转载自gang-zai.iteye.com/blog/716512