由于测试程序过长,所以分成了贴,如果您看着不方便,请谅解哦 
/**
 * 多短语所搜
 * 
 * @param path
 * @throws IOException
 */
public static void multiPhraseQuery(String path) throws IOException {
IndexSearcher searcher = new IndexSearcher(path);
// 构建一个MultiPhraseQuery对象
MultiPhraseQuery query = new MultiPhraseQuery();
// 首先向query中加入要查找的词语的前缀
query.add(new Term("bookname", "钢"));
// 构建三个Term作为词语后缀
Term t1 = new Term("bookname", "铁");
Term t2 = new Term("bookname", "到");
// 在向query中加入所有的词语后缀
// 这表示lucene最终搜索结果将包括所有具有“钢铁”,“刚到”这两个短语的文档
query.add(new Term[] { t1, t2 });
Hits hits = searcher.search(query);
for (int i = 0; i < hits.length(); i++) {
System.out.println(hits.doc(i));
} searcher.close();
} /**
 * 短语搜索
 * 
 * @param path
 * @throws IOException
 */
public static void phraseQuery(String path) throws IOException {
IndexSearcher searcher = new IndexSearcher(path);
Term t1 = new Term("bookname", "钢");
Term t2 = new Term("bookname", "铁");
// 进行短语搜索,搜索含“钢铁”这个词语的文档Document
PhraseQuery query = new PhraseQuery();
query.add(t1);
query.add(t2);
// PhraseQuery还有一个坡度值,可以设置允许搜索的关键字之间插入一个或多个无关紧要的词
// 设置“刚”和“铁”之间可以混有0个或一个无关紧要的字
query.setSlop(1);
Hits hits = searcher.search(query);
for (int i = 0; i < hits.length(); i++) {
System.out.println(hits.doc(i));
}
searcher.close();
} /**
 * 前缀搜索
 * 
 * @param path
 * @throws IOException
 */
public static void prefixQuery(String path) throws IOException {
IndexSearcher searcher = new IndexSearcher(path);
// 构建一个Term用于表示查询的前缀
Term t = new Term("bookname", "钢");
// prefixQuery的构造函数只有一个,就是用Term来构造
PrefixQuery query = new PrefixQuery(t);
Hits hits = searcher.search(query);
for (int i = 0; i < hits.length(); i++) {
System.out.println(hits.doc(i));
}
searcher.close();
} /**
 * 范围搜索
 * 
 * @param path
 * @throws IOException
 */
public static void rangeQuery(String path) throws IOException {
IndexWriter writer = new IndexWriter(path, new StandardAnalyzer(),
false); Document doc1 = new Document();
Document doc2 = new Document();
Document doc3 = new Document();
Document doc4 = new Document();
Document doc5 = new Document();
Document doc6 = new Document();
Document doc7 = new Document();
Document doc8 = new Document(); Field f1 = new Field("booknumber", "00001", Field.Store.YES,
Field.Index.TOKENIZED);
Field f2 = new Field("booknumber", "00002", Field.Store.YES,
Field.Index.TOKENIZED);
Field f3 = new Field("booknumber", "00003", Field.Store.YES,
Field.Index.TOKENIZED);
Field f4 = new Field("booknumber", "00008", Field.Store.YES,
Field.Index.TOKENIZED);
Field f5 = new Field("booknumber", "00005", Field.Store.YES,
Field.Index.TOKENIZED);
Field f6 = new Field("booknumber", "00006", Field.Store.YES,
Field.Index.TOKENIZED);
Field f7 = new Field("booknumber", "00007", Field.Store.YES,
Field.Index.TOKENIZED);
Field f8 = new Field("booknumber", "00004", Field.Store.YES,
Field.Index.TOKENIZED); doc1.add(f1);
doc2.add(f2);
doc3.add(f3);
doc4.add(f4);
doc5.add(f5);
doc6.add(f6);
doc7.add(f7);
doc8.add(f8); writer.addDocument(doc1);
writer.addDocument(doc2);
writer.addDocument(doc3);
writer.addDocument(doc4);
writer.addDocument(doc5);
writer.addDocument(doc6);
writer.addDocument(doc7);
writer.addDocument(doc8);
writer.close(); Term t1 = new Term("booknumber", "00001");
Term t2 = new Term("booknumber", "00006"); // 检索位于上下界间的所有文档
IndexSearcher searcher = new IndexSearcher(path);
RangeQuery query = new RangeQuery(t1, t2, false);
Hits hits = searcher.search(query);
for (int i = 0; i < hits.length(); i++) {
System.out.println(hits.doc(i));
System.out.println(hits.id(i));
System.out.println("**********************************");
}
searcher.close(); } /**
 * 布尔搜索
 * 
 * @param path
 * @throws IOException
 */
public static void booleanQuery1(String path) throws IOException {
IndexSearcher searcher = new IndexSearcher(path);
// 创建三个词条
Term t1 = new Term("bookname", "女");
Term t2 = new Term("bookname", "人");
Term t3 = new Term("bookname", "狗");
// 创建三个Query
Query q1 = new TermQuery(t1);
Query q2 = new TermQuery(t2);
Query q3 = new TermQuery(t3); // 查询逻辑包含“女”和“人”,但不包含“狗”的
BooleanQuery query = new BooleanQuery();
query.add(q1, BooleanClause.Occur.MUST);
query.add(q2, BooleanClause.Occur.MUST);
query.add(q3, BooleanClause.Occur.MUST_NOT); Hits hits = searcher.search(query);
for (int i = 0; i < hits.length(); i++) {
System.out.println("×××××××××××××××××××");
System.out.println(hits.doc(i));
System.out.println(hits.score(i));
System.out.println(hits.id(i));
System.out.println("×××××××××××××××××××");
} searcher.close(); } public static void booleanQuery(String path) throws IOException {
IndexSearcher searcher = new IndexSearcher(path); // 创建两个词条对象
Term t1 = new Term("bookname", "女");
Term t2 = new Term("bookname", "狗"); // 创建两个TermQuery
Query q1 = new TermQuery(t1);
Query q2 = new TermQuery(t2); // 创建BooleanQuery
BooleanQuery query = new BooleanQuery();
// 将两个TermQuery加入BooleanQuery的字句中,且关系均为必须满足
query.add(q1, BooleanClause.Occur.MUST);
query.add(q2, BooleanClause.Occur.MUST);
// query.add(q2,BooleanClause.Occur.SHOULD);
// query.add(q2,BooleanClause.Occur.MUST_NOT); // 打印查询结果
Hits hits = searcher.search(query);
for (int i = 0; i < hits.length(); i++) {
System.out.println("×××××××××××××××××××");
System.out.println(hits.doc(i));
System.out.println(hits.score(i));
System.out.println(hits.id(i));
System.out.println("×××××××××××××××××××");
}
searcher.close();
} public static void searcherScore(String path) throws IOException {
IndexWriter writer = new IndexWriter(path, new StandardAnalyzer(), true);
writer.setUseCompoundFile(false);
// 先创建8个文档
Document doc1 = new Document();
Document doc2 = new Document();
Document doc3 = new Document();
Document doc4 = new Document();
Document doc5 = new Document();
Document doc6 = new Document();
Document doc7 = new Document();
Document doc8 = new Document(); Field f1 = new Field("bookname", "钢铁是怎样炼成的", Field.Store.YES,
Field.Index.TOKENIZED);
Field f2 = new Field("bookname", "英雄儿女", Field.Store.YES,
Field.Index.TOKENIZED);
Field f3 = new Field("bookname", "篱笆女人和狗", Field.Store.YES,
Field.Index.TOKENIZED);
// 设置f3的激进因子,把该域设置为较低的值,从而降低文档的得分
f3.setBoost(0.1f);
Field f4 = new Field("bookname", "女人是月亮", Field.Store.YES,
Field.Index.TOKENIZED);
Field f5 = new Field("bookname", "我的兄弟和女儿", Field.Store.YES,
Field.Index.TOKENIZED);
Field f6 = new Field("bookname", "白毛女", Field.Store.YES,
Field.Index.TOKENIZED);
Field f7 = new Field("bookname", "钢到世界", Field.Store.YES,
Field.Index.TOKENIZED);
Field f8 = new Field("bookname", "钢铁男人", Field.Store.YES,
Field.Index.TOKENIZED); doc1.add(f1);
doc2.add(f2);
doc3.add(f3);
doc4.add(f4);
doc5.add(f5);
doc6.add(f6);
doc7.add(f7);
doc8.add(f8); writer.addDocument(doc1);
writer.addDocument(doc2);
writer.addDocument(doc3);
writer.addDocument(doc4);
writer.addDocument(doc5);
writer.addDocument(doc6);
writer.addDocument(doc7);
writer.addDocument(doc8); writer.close(); // 检索
IndexSearcher searcher = new IndexSearcher(path);
Term t = new Term("bookname", "女");
Query q = new TermQuery(t);
Hits hits = searcher.search(q);
for (int i = 0; i < hits.length(); i++) {
System.out.println(hits.doc(i));
}
searcher.close();
}
}