qq_27775803 2017-05-24 06:02 采纳率: 0%
浏览 1559

Lucene中document的id。

在对很多文档进行索引之后,该怎样去快速定位到Documen的位置?
例如我要查找包含“上海”的文档,我该怎样快速定位包含“上海"的document的位置?

  • 写回答

1条回答 默认 最新

  • wlq199101 2017-05-24 06:38
    关注
     public class ReaderByIndexerTest {  
    
        public static void search(String indexDir,String q)throws Exception{  
    
            //得到读取索引文件的路径  
            Directory dir=FSDirectory.open(Paths.get(indexDir));  
    
            //通过dir得到的路径下的所有的文件  
            IndexReader reader=DirectoryReader.open(dir);  
    
            //建立索引查询器  
            IndexSearcher is=new IndexSearcher(reader);  
    
            //实例化分析器  
            Analyzer analyzer=new StandardAnalyzer();   
    
            //建立查询解析器  
            /** 
             * 第一个参数是要查询的字段; 
             * 第二个参数是分析器Analyzer 
             * */  
            QueryParser parser=new QueryParser("title", analyzer);  
    
            //根据传进来的p查找  
            Query query=parser.parse(q);  
    
            //计算索引开始时间  
            long start=System.currentTimeMillis();  
    
            //开始查询  
            /** 
             * 第一个参数是通过传过来的参数来查找得到的query; 
             * 第二个参数是要出查询的行数 
             * */  
            TopDocs hits=is.search(query, 500);  
    //        TopDocs hits1= is.searchAfter(hits.scoreDocs[999], query, 1);
            //计算索引结束时间  
            long end=System.currentTimeMillis();  
    
            System.out.println("匹配 "+q+" ,总共花费"+(end-start)+"毫秒"+"查询到"+hits.totalHits+"个记录");  
            //遍历hits.scoreDocs,得到scoreDoc  
            /** 
             * ScoreDoc:得分文档,即得到文档 
             * scoreDocs:代表的是topDocs这个文档数组 
             * @throws Exception  
             * */  
            for(ScoreDoc scoreDoc:hits.scoreDocs){  
                Document doc=is.doc(scoreDoc.doc);  
                System.out.println("id="+doc.get("id")+"---->title="+doc.get("title"));  
    
            }  
            //关闭reader  
    
            reader.close();  
        }  
    
        //测试  
        public static void main(String[] args) {  
             long start=System.currentTimeMillis();  
            String indexDir="d:\\luceneDemo";  
            String q="70533636-1448-4ed5-922f-ef33557d32ee";  
            try {  
                      search(indexDir,q);  
            } catch (Exception e) {  
                // TODO Auto-generated catch block  
                 e.printStackTrace();  
            }  
            long end=System.currentTimeMillis();  
            System.out.println("总流程花费"+(end-start)+"毫秒");  
        }  
    
    

    匹配 70533636-1448-4ed5-922f-ef33557d32ee ,总共花费1051毫秒查询到3926个记录
    id=10000000---->title=70533636-1448-4ed5-922f-ef33557d32ee
    id=6050845---->title=973c3b75-4b35-4ed5-922f-af6b3e3d79c3
    id=9464722---->title=af29187f-1448-4c97-a58f-08f7a70756c0
    id=9088371---->title=1fdd7d52-1448-482d-9320-e66b263a55a5
    id=9223590---->title=32a056b5-1448-4a94-91ea-3ef62654d6a1
    id=9223659---->title=0f77f7a2-1448-4d70-a446-c6ca17df1adc
    id=9260433---->title=ee1dc06c-1448-4ae8-acae-67b8434147c4
    .............

    评论

报告相同问题?

悬赏问题

  • ¥15 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!