?? lucenesearchspanquery.java
字號:
package chapter6;
import java.io.IOException;
import org.apache.lucene.index.Term;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.SimpleAnalyzer;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.Hits;
import org.apache.lucene.search.spans.*;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.queryParser.*;
public class LuceneSearchSpanQuery {
private static String Dest_Index_Path = "D:\\workshop\\TextIndex";
static protected String[] keywords = {"001","002","003"};
static protected String[] textdetail = {"記錄一 記錄二 記錄三 記錄四 記錄五","記錄一 記錄六 記錄七 記錄八 記錄九 記錄十 記錄三","記錄十一 記錄十二 記錄十三 記錄十四 記錄十五"};
/*================================================================
* 名 稱:SpanFirstQueryTest
* 功 能:構(gòu)造SpanQuery檢索查詢器,對指定的目錄進行查詢,找到指定的值,并輸出相應(yīng)結(jié)果。
===============================================================*/
public static void SpanFirstQueryTest(){
try {
IndexSearcher searcher = new IndexSearcher(Dest_Index_Path);
String searchWords = "記錄四";
Term t = new Term("content",searchWords);
SpanTermQuery query = new SpanTermQuery(t);
SpanFirstQuery firstquery = new SpanFirstQuery(query,4);
System.out.println(query.toString());
Hits hits = searcher.search(firstquery);
System.out.println("Search result:");
for(int i=0; i < hits.length(); i++)
{
System.out.println(hits.doc(i));
System.out.println(hits.doc(i).getField("id"));
}
}catch (IOException e) {
e.printStackTrace();
}
System.out.println("Search success");
}
/*================================================================
* 名 稱:SpanNearQueryTest
* 功 能:構(gòu)造SpanNearQuery檢索查詢器,對指定的目錄進行查詢,找到指定的值,
* 并輸出相應(yīng)結(jié)果。
===============================================================*/
public static void SpanNearQueryTest(){
try {
IndexSearcher searcher = new IndexSearcher(Dest_Index_Path);
Term t1 = new Term("content","記錄一");
Term t2 = new Term("content","記錄三");
Term t3 = new Term("content","記錄四");
SpanTermQuery query1 = new SpanTermQuery(t1);
SpanTermQuery query2 = new SpanTermQuery(t2);
SpanTermQuery query3 = new SpanTermQuery(t3);
SpanQuery[] queryarray = new SpanQuery[]{query1,query3};
SpanNearQuery nearquery = new SpanNearQuery(queryarray,2,true);
System.out.println(nearquery.toString());
Hits hits = searcher.search( nearquery );
System.out.println("Search result:");
for(int i=0; i < hits.length(); i++)
{
System.out.println(hits.doc(i));
System.out.println(hits.doc(i).getField("id"));
}
}catch (IOException e) {
e.printStackTrace();
}
System.out.println("Search success");
}
/*================================================================
* 名 稱:SpanNotQueryTest
* 功 能:構(gòu)造SpanNotQuery檢索查詢器,對指定的目錄進行查詢,找到指定的值,
* 并輸出相應(yīng)結(jié)果。
===============================================================*/
public static void SpanNotQueryTest(){
try {
IndexSearcher searcher = new IndexSearcher(Dest_Index_Path);
Term t1 = new Term("content","記錄一");
Term t2 = new Term("content","記錄三");
Term t3 = new Term("content","記錄四");
SpanTermQuery query1 = new SpanTermQuery(t1);
SpanTermQuery query2 = new SpanTermQuery(t2);
SpanTermQuery query3 = new SpanTermQuery(t3);
SpanQuery[] queryarray = new SpanQuery[]{query1,query3};
SpanNearQuery nearquery = new SpanNearQuery(queryarray,1,true);
SpanNotQuery notquery = new SpanNotQuery(nearquery,query2);
System.out.println(notquery.toString());
Hits hits = searcher.search( notquery );
System.out.println("Search result:");
for(int i=0; i < hits.length(); i++)
{
System.out.println(hits.doc(i));
System.out.println(hits.doc(i).getField("id"));
}
}catch (IOException e) {
e.printStackTrace();
}
System.out.println("Search success");
}
/*================================================================
* 名 稱:SpanOrQueryTest
* 功 能:構(gòu)造SpanOrQuery檢索查詢器,對指定的目錄進行查詢,找到指定的值,
* 并輸出相應(yīng)結(jié)果。
===============================================================*/
public static void SpanOrQueryTest(){
try {
IndexSearcher searcher = new IndexSearcher(Dest_Index_Path);
Term t1 = new Term("content","記錄一");
Term t2 = new Term("content","記錄三");
Term t3 = new Term("content","記錄四");
SpanTermQuery query1 = new SpanTermQuery(t1);
SpanTermQuery query2 = new SpanTermQuery(t2);
SpanTermQuery query3 = new SpanTermQuery(t3);
SpanQuery[] queryarray1 = new SpanQuery[]{query1,query2};
SpanQuery[] queryarray2 = new SpanQuery[]{query2,query3};
SpanNearQuery nearquery1 = new SpanNearQuery(queryarray1,1,true);
SpanNearQuery nearquery2 = new SpanNearQuery(queryarray2,1,true);
SpanOrQuery orquery = new SpanOrQuery(new SpanNearQuery[]{nearquery1,nearquery2});
System.out.println(orquery.toString());
Hits hits = searcher.search( orquery );
System.out.println("Search result:");
for(int i=0; i < hits.length(); i++)
{
System.out.println(hits.doc(i));
System.out.println(hits.doc(i).getField("id"));
}
}catch (IOException e) {
e.printStackTrace();
}
System.out.println("Search success");
}
/*================================================================
* 名 稱:TermQueryParserTest
* 功 能:測試QueryParser生成TermQuery對象,并利用檢索查詢器,對指定的目錄進行查詢,
* 找到指定的值,并輸出相應(yīng)結(jié)果。
===============================================================*/
public static void TermQueryParserTest(){
try {
IndexSearcher searcher = new IndexSearcher(Dest_Index_Path);
String searchWords = "記錄";
Analyzer analyzer = new SimpleAnalyzer();
QueryParser parser = new QueryParser("content",analyzer);
try{
Query query = parser.parse(searchWords);
System.out.println(query.toString());
System.out.println(query.getClass());
Hits hits = searcher.search(query);
System.out.println("Search result:");
for(int i=0; i < hits.length(); i++)
{
System.out.println(hits.doc(i));
System.out.println(hits.doc(i).getField("id"));
}
} catch(ParseException e1){
e1.printStackTrace();
}
}catch (IOException e) {
e.printStackTrace();
}
System.out.println("Search success");
}
/*================================================================
* 名 稱:SpanIndexBuilder
* 功 能:構(gòu)造磁盤索引,添加內(nèi)容到指定目錄,為后續(xù)檢索查詢做好準(zhǔn)備。
===============================================================*/
public static void SpanIndexBuilder(){
try {
Analyzer TextAnalyzer = new SimpleAnalyzer();
IndexWriter TextIndex = new IndexWriter(Dest_Index_Path,TextAnalyzer,true);
TextIndex.setUseCompoundFile(true);
for(int i = 0; i < 3 ; i++){
Document document = new Document();
Field field_id = new Field("id", keywords[i],
Field.Store.YES,Field.Index.UN_TOKENIZED);
document.add(field_id);
Field field_content = new Field("content", textdetail[i],
Field.Store.YES,Field.Index.TOKENIZED);
document.add(field_content);
TextIndex.addDocument(document);
}
TextIndex.optimize();
TextIndex.close();
}catch (IOException e) {
e.printStackTrace();
}
System.out.println("Index success");
}
/*================================================================
* 名 稱:main
* 功 能:測試Lucene索引建立和檢索查詢功能。
===============================================================*/
public static void main(String[] args) {
SpanIndexBuilder();
//SpanFirstQueryTest();
//SpanNearQueryTest();
//SpanNotQueryTest();
SpanOrQueryTest();
System.out.println("Test success");
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -