Lucene中document的id。

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

1个回答

 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
.............

wlq199101
wlq199101 匹配 13000000 ,总共花费11毫秒查询到1个记录 id=13000000---->title=60ec5b2e-090f-49fe-9115-04884a70a03c 总流程花费301毫秒
2 年多之前 回复
wlq199101
wlq199101 回复qq_27775803: id,title都有 关键看 QueryParser parser=new QueryParser("title", analyzer); 这个地方匹配哪个field
2 年多之前 回复
wlq199101
wlq199101 回复qq_27775803: document=new Document(); document.add(new TextField("id",tmp[0], Field.Store.YES)); document.add(new TextField("title",tmp[1], Field.Store.YES)); writer.addDocument(document);
2 年多之前 回复
qq_27775803
qq_27775803 你的"id"是在创建索引是添加的"id"field吗?
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问