Lucene查詢對象淺析(二)

第四種:短語搜索。一般用戶在搜索的時候都會輸入一個關鍵詞來搜索,短語搜索就是用來應對這種需求的。
Java代碼
Document doc1 = new Document();        
                Document doc2 = new Document();        
                Document doc3 = new Document();        
                Field field1 = new Field("postTitle","Java語言",Field.Store.YES,Field.Index.TOKENIZED);        
                Field field2 = new Field("postTitle","言語",Field.Store.YES,Field.Index.TOKENIZED);        
                Field field3 = new Field("postTitle","Luene開發詳解",Field.Store.YES,Field.Index.TOKENIZED);        
                doc1.add(field1);        
                doc2.add(field2);        
                doc3.add(field3);        
                        
                IndexWriter writer = new IndexWriter(STORE_PATH, new StandardAnalyzer(), true);        
                writer.addDocument(doc1);        
                writer.addDocument(doc2);        
                writer.addDocument(doc3);        
                writer.close();        
                        
                PhraseQuery query = new PhraseQuery();        
                query.add(new Term("postTitle","語"));        
                query.add(new Term("postTitle","言"));        
                        
                IndexSearcher searcher = new IndexSearcher(STORE_PATH);        
                Hits hits = searcher.search(query);        
                System.out.println("phraseQuery demo------");        
                System.out.println("hits.length()==" + hits.length());        
                for(int i = 0;i<hits.length();i++){        
                        System.out.println(hits.doc(i));        
}    
 
運行結果:
Java代碼
phraseQuery demo------        
hits.length()==1    
Document<stored/uncompressed,indexed,tokenized<postTitle:Java語言>>    
 
第五種:多短語搜索。多短語搜索顧名思意也就是對多個短語進行搜索,它容許指定短語的前綴和後綴來進行組合,然後在進行搜索。
代碼如下:
Java代碼
Document doc1 = new Document();        
                Document doc2 = new Document();        
                Document doc3 = new Document();        
                Field field1 = new Field("postTitle","中國人是偉大的",Field.Store.YES,Field.Index.TOKENIZED);        
                Field field2 = new Field("postTitle","中華名族是偉大的名族",Field.Store.YES,Field.Index.TOKENIZED);        
                Field field3 = new Field("postTitle","黨中央",Field.Store.YES,Field.Index.TOKENIZED);        
                doc1.add(field1);        
                doc2.add(field2);        
                doc3.add(field3);        
                        
                IndexWriter writer = new IndexWriter(STORE_PATH, new StandardAnalyzer(), true);        
                writer.addDocument(doc1);        
                writer.addDocument(doc2);        
                writer.addDocument(doc3);        
                writer.close();        
                        
                MultiPhraseQuery query = new MultiPhraseQuery();        
                //加入短語前綴        
                query.add(new Term("postTitle","中"));        
                //加入短語後綴        
                query.add(new Term[]{new Term("postTitle","國"),new Term("postTitle","華"),new Term("postTitle","央")});        
                        
                IndexSearcher searcher = new IndexSearcher(STORE_PATH);        
                Hits hits = searcher.search(query);        
                System.out.println("multiPhraseQuery demo------");        
                System.out.println("hits.length()==" + hits.length());        
                for(int i = 0;i<hits.length();i++){        
                        System.out.println(hits.doc(i));        
}    
 
運行結果如下:
Java代碼
multiPhraseQuery demo------        
hits.length()==3    
Document<stored/uncompressed,indexed,tokenized<postTitle:黨中央>>        
Document<stored/uncompressed,indexed,tokenized<postTitle:中國人是偉大的>>        
Document<stored/uncompressed,indexed,tokenized<postTitle:中華名族是偉大的名族>>    
 
第六種:前綴搜索。前綴搜索主要是用來根據指定的前綴進行搜索。
代碼如下:
Java代碼
Document doc1 = new Document();        
                Document doc2 = new Document();        
                Document doc3 = new Document();        
                Field field1 = new Field("postTitle","Java語言簡介",Field.Store.YES,Field.Index.TOKENIZED);        
                Field field2 = new Field("postTitle","JavaEE各種框架",Field.Store.YES,Field.Index.TOKENIZED);        
                Field field3 = new Field("postTitle","Luene開發詳解",Field.Store.YES,Field.Index.TOKENIZED);        
                doc1.add(field1);        
                doc2.add(field2);        
                doc3.add(field3);        
                        
                IndexWriter writer = new IndexWriter(STORE_PATH, new StandardAnalyzer(), true);        
                writer.addDocument(doc1);        
                writer.addDocument(doc2);        
                writer.addDocument(doc3);        
                writer.close();        
                        
                Term term = new Term("postTitle","java");        
                        
                Query query = new PrefixQuery(term);        
                        
                IndexSearcher searcher = new IndexSearcher(STORE_PATH);        
                Hits hits = searcher.search(query);        
                System.out.println("PrefixQuery demo------");        
                System.out.println("hits.length()==" + hits.length());        
                for(int i = 0;i<hits.length();i++){        
                        System.out.println(hits.doc(i));        
}    
 
運行結果:
Java代碼
PrefixQuery demo------        
hits.length()==2    
Document<stored/uncompressed,indexed,tokenized<postTitle:Java語言簡介>>        
Document<stored/uncompressed,indexed,tokenized<postTitle:JavaEE各種框架>>    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章