lucene QueryParser用法示例

  1. package demo.first;   
  2.   
  3. import java.io.IOException;   
  4. import java.util.Date;   
  5.   
  6. import org.apache.lucene.analysis.standard.StandardAnalyzer;   
  7. import org.apache.lucene.document.Document;   
  8. import org.apache.lucene.document.Field;   
  9. import org.apache.lucene.index.CorruptIndexException;   
  10. import org.apache.lucene.index.IndexWriter;   
  11. import org.apache.lucene.queryParser.QueryParser;   
  12. import org.apache.lucene.search.Hits;   
  13. import org.apache.lucene.search.IndexSearcher;   
  14. import org.apache.lucene.search.Query;   
  15. import org.apache.lucene.search.Searcher;   
  16. import org.apache.lucene.store.LockObtainFailedException;   
  17.   
  18. public class TestQueryParser {   
  19.   
  20.     public static void main(String[] args) throws CorruptIndexException, IOException {   
  21.         String path = "D://workspace//fwk//lucenedemo//firstLuceneIndex";   
  22.         TestQueryParser tqp = new TestQueryParser();   
  23.         tqp.createIndex(path);   
  24.         Searcher search = tqp.getSearcher(path);   
  25.         System.out.println("#_2");   
  26.         tqp.testTime(search, tqp.getQueryParser2());   
  27.         System.out.println("#_1");   
  28.         tqp.testTime(search, tqp.getQueryParser1());   
  29.         System.out.println("#_3");   
  30.         tqp.testTime(search, tqp.getQueryParser3());   
  31.         System.out.println("#_4");   
  32.         tqp.testTime(search, tqp.getQueryParser4());   
  33.         System.out.println("#_5");   
  34.         tqp.testTime(search, tqp.getQueryParser5());   
  35.         System.out.println("#_6");   
  36.         tqp.testTime(search, tqp.getQueryParser6());   
  37.         System.out.println("#_7");   
  38.         tqp.testTime(search, tqp.getQueryParser7());   
  39.     }   
  40.        
  41.     public void testTime(Searcher search,Query query) throws IOException{   
  42.         Date start = new Date();   
  43.         Hits hits = search.search(query);   
  44.         for (int i = 0; i < hits.length(); i++) {   
  45.             System.out.println(hits.id(i));   
  46.             System.out.println(hits.doc(i));   
  47.             System.out.println(hits.score(i));   
  48.         }   
  49.            
  50.         System.out.println("本次搜索用时:" + ((new Date()).getTime() - start.getTime()) + "毫秒");   
  51.            
  52.     }   
  53.        
  54.     public Searcher getSearcher(String path) throws CorruptIndexException, IOException{   
  55.             return new IndexSearcher(path);   
  56.     }   
  57.        
  58.     public Query getQueryParser1(){   
  59.         //默认搜索字段   
  60.         QueryParser queryParser = new QueryParser("content"new StandardAnalyzer());   
  61.         try {   
  62.             return queryParser.parse("搜索 - 擎");   
  63.         } catch (Exception e) {   
  64.             e.printStackTrace();   
  65.         }   
  66.         return null;   
  67.     }   
  68.        
  69.     public Query getQueryParser2(){   
  70.         QueryParser queryParser = new QueryParser("content"new StandardAnalyzer());   
  71.         try {   
  72.             return queryParser.parse("欢迎");   
  73.         } catch (Exception e) {   
  74.             e.printStackTrace();   
  75.         }   
  76.         return null;   
  77.     }   
  78.        
  79.     public Query getQueryParser3(){   
  80.         QueryParser queryParser = new QueryParser("content"new StandardAnalyzer());   
  81.         try {   
  82.             return queryParser.parse("搜索 and 擎");   
  83.         } catch (Exception e) {   
  84.             e.printStackTrace();   
  85.         }   
  86.         return null;   
  87.     }   
  88.        
  89.     public Query getQueryParser4(){   
  90.         QueryParser queryParser = new QueryParser("content"new StandardAnalyzer());   
  91.         try {   
  92.             //content字段搜索 索引   title字段搜寻 你好   
  93.             return queryParser.parse("索引 title:你好");   
  94.         } catch (Exception e) {   
  95.             e.printStackTrace();   
  96.         }   
  97.         return null;   
  98.     }   
  99.        
  100.     public Query getQueryParser5(){   
  101.         QueryParser queryParser = new QueryParser("content"new StandardAnalyzer());   
  102.         //允许使用正则表达式方式   
  103.         queryParser.setAllowLeadingWildcard(true);   
  104.         try {   
  105.             return queryParser.parse("*索*");   
  106.         } catch (Exception e) {   
  107.             e.printStackTrace();   
  108.         }   
  109.         return null;   
  110.     }   
  111.     /**  
  112.      * 采用标准分词器StandardAnalyzer会在创建索引的时候把存入的英文全部换成小写放在索引中 查询的时候也会将查询的关键词转为小写进行查询  
  113.      * @return  
  114.      */  
  115.     public Query getQueryParser6(){   
  116.         QueryParser queryParser = new QueryParser("testCapital"new StandardAnalyzer());   
  117.         try {   
  118.             return queryParser.parse("hellOwangzi");   
  119.         } catch (Exception e) {   
  120.             e.printStackTrace();   
  121.         }   
  122.         return null;   
  123.     }   
  124.        
  125.     /**  
  126.      * 采用标准分词器StandardAnalyzer会在创建索引的时候把存入的and or等关键字过滤掉 所以在查询的时候怎么也查不到  
  127.      * @return  
  128.      */  
  129.     public Query getQueryParser7(){   
  130.         QueryParser queryParser = new QueryParser("testAndOr"new StandardAnalyzer());   
  131.         try {   
  132.             //return queryParser.parse("and");   
  133.             return queryParser.parse("test");   
  134.         } catch (Exception e) {   
  135.             e.printStackTrace();   
  136.         }   
  137.         return null;   
  138.     }   
  139.     /**  
  140.      * 创建索引  
  141.      * @param path  
  142.      */  
  143.     public void createIndex(String path){   
  144.         try {   
  145.             IndexWriter writer = new IndexWriter(path,new StandardAnalyzer(),true);   
  146.             Document docA = new Document();   
  147.             //相当于数据库中列的概念,因此第一个参数是列名,第二个参数是列的值,最后两个参数是enum类型的(JDK1.5),对创建的索引的设置   
  148.             //Field.Store 是否覆盖原来的索引文件,而不是重新建一个   
  149.             Field fieldA = new Field("content","搜索引擎",Field.Store.YES,Field.Index.TOKENIZED);   
  150.             //我们把列(fieldA)加到某一行(docA)中   
  151.             docA.add(fieldA);   
  152.                
  153.             docA.add(new Field("title","你好中国",Field.Store.YES,Field.Index.TOKENIZED));   
  154.             docA.add(new Field("content","欢迎你llying",Field.Store.YES,Field.Index.TOKENIZED));   
  155.             docA.add(new Field("lastModifyTime","2008-9-17",Field.Store.YES,Field.Index.TOKENIZED));   
  156.             docA.add(new Field("testCapital","HelloWangzi",Field.Store.YES,Field.Index.TOKENIZED));   
  157.             docA.add(new Field("testAndOr","test and",Field.Store.YES,Field.Index.TOKENIZED));   
  158.                
  159.             Document docB = new Document();   
  160.             //相当于数据库中列的概念,因此第一个参数是列名,第二个参数是列的值,最后两个参数是enum类型的(JDK1.5),对创建的索引的设置   
  161.             Field fieldB = new Field("content","创建索引",Field.Store.YES,Field.Index.TOKENIZED);   
  162.             //我们把列(fieldA)加到某一行(docA)中   
  163.             docB.add(fieldB);   
  164.             docB.add(new Field("title","你好世界",Field.Store.YES,Field.Index.TOKENIZED));   
  165.             docB.add(new Field("content","欢迎加入jee高级开发群46176507",Field.Store.YES,Field.Index.TOKENIZED));   
  166.             docB.add(new Field("lastModifyTime","2008-9-6",Field.Store.YES,Field.Index.TOKENIZED));   
  167.             docB.add(new Field("testCapital","hellowangZi",Field.Store.YES,Field.Index.TOKENIZED));   
  168.             docB.add(new Field("testAndOr","test or",Field.Store.YES,Field.Index.TOKENIZED));   
  169.                
  170.             writer.addDocument(docA);   
  171.             writer.addDocument(docB);   
  172.                
  173.             //如果对海量数据进行创建索引的时候,需要对索引进行优化,以便提高速度   
  174.             writer.optimize();   
  175.                
  176.             //跟数据库类似,打开一个连接,使用完后,要关闭它   
  177.             writer.close();   
  178.         } catch (CorruptIndexException e) {   
  179.             e.printStackTrace();   
  180.         } catch (LockObtainFailedException e) {   
  181.             e.printStackTrace();   
  182.         } catch (IOException e) {   
  183.             e.printStackTrace();   
  184.         }   
  185.     }   
  186.   
  187. }  

猜你喜欢

转载自sassds.iteye.com/blog/1149300
今日推荐