Lucene——数字日期

为时间增加索引,增加的是NumericField域

//存储数字   
doc.add(new NumericField("attach",Field.Store.YES,true).setIntValue(attachs[i]));  
//存储日期   
doc.add(new NumericField("date",Field.Store.YES,true).setLongValue(dates[i].getTime())); 

时间的转换

这个不会有点丢人

SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-DD"); 
date=sdf.parse("2012-01-01"); 

 

1325408580000L转化成

String str = new SimpleDateFormat("yyyy-MM-dd").format(new Date(1325408580000L));

package org.itat.index;

//创建索引
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.NumericField;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.store.LockObtainFailedException;
import org.apache.lucene.util.Version;

public class IndexUtil {
		private String[] ids={"1","2","3","4","5","6"};
		private String[] emails={"dd@@dd.org","aa@jingtian.org","bb@jingtian.org","cc@ytu.edu","ee@ee.org","ff@ff.org"};
		private String[] contents={"I like soccer","I like football","I like soccer and I like game","I like book","I like soccer","I like soccer"};
		private int[] attachs={3,6,8,9,5,4,5};
		private String[] names={"zhangsan","lisi","wangwu","zhaoliu","wuba","chenjiu"};
		private Directory directory=null;
		private Map<String,Float> scores=new HashMap<String, Float>();
		private Date[] dates=null;
		
		public IndexUtil()
		{
			scores.put("jingtian.org", 8f);
			scores.put("ytu.edu", 6f);
			
			try {
				directory=FSDirectory.open(new File("e:/lucene/index02"));
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		public void query()
		{
			try {
				IndexReader reader=IndexReader.open(directory);
				System.out.println("numdocs:"+reader.numDocs());
				System.out.println("maxDocs:"+reader.maxDoc());
				System.out.println("detelemaxDocs:"+reader.numDeletedDocs());
				reader.close();
				
			} catch (CorruptIndexException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
		
		public void index()
		{
				setDate();
			   IndexWriter writer=null;
			   Document doc=null;
			   try {
//				   writer.deleteAll(); 
				writer =new IndexWriter(directory,new IndexWriterConfig(Version.LUCENE_35, 
						   new StandardAnalyzer(Version.LUCENE_35)));
				for(int i=0;i<ids.length;i++)
				{
					doc=new Document();
			    	doc.add(new Field("id",ids[i],Field.Store.YES,Field.Index.NOT_ANALYZED_NO_NORMS));
			    	doc.add(new Field("email",emails[i],Field.Store.YES,Field.Index.ANALYZED));
			    	doc.add(new Field("content",contents[i],Field.Store.NO,Field.Index.ANALYZED));
			    	doc.add(new Field("name",names[i],Field.Store.YES,Field.Index.NOT_ANALYZED_NO_NORMS));

			        //存储数字   
                    doc.add(new NumericField("attach",Field.Store.YES,true).setIntValue(attachs[i]));  
                    //存储日期   
                    doc.add(new NumericField("date",Field.Store.YES,true).setLongValue(dates[i].getTime()));  
                    
			    	String et=emails[i].substring(emails[i].lastIndexOf("@")+1);  
                    System.out.println(et);  
                    if(scores.containsKey(et))  
                    {  
                        doc.setBoost(scores.get(et));  
                    }  
                    else {  
                        doc.setBoost(5f);  
                    }  

                    writer.addDocument(doc);
				}
			} catch (CorruptIndexException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (LockObtainFailedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			   finally{
				   if(writer!=null)
				   {
					  try {
						writer.close();
					} catch (CorruptIndexException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}   
				   }
			   }
		}
		//删除
		public void delete()  
        {  
            IndexWriter writer=null;  
            try {  
                writer=new IndexWriter(directory, new IndexWriterConfig(Version.LUCENE_35,  
                        new StandardAnalyzer(Version.LUCENE_35)));  
                //参数是一个选项.可以是一个query,也可以是一个term  term就是一个精确查找的值   
                //此时删除的文档并未完全删除,而是存储在回收站中,可以恢复的   
                writer.deleteDocuments(new Term("id","1"));  
            } catch (CorruptIndexException e) {  
                e.printStackTrace();  
            } catch (LockObtainFailedException e) {  
                e.printStackTrace();  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
            finally{  
                if (writer!=null) {  
                    try {  
                        writer.close();  
                    } catch (CorruptIndexException e) {  
                        // TODO Auto-generated catch block   
                        e.printStackTrace();  
                    } catch (IOException e) {  
                        // TODO Auto-generated catch block   
                        e.printStackTrace();  
                    }  
                }  
            }  
        } 
		//恢复
		public void undelete()  
        {  
            try {  
                //恢复时必须把reader的只读设为false   
                IndexReader reader=IndexReader.open(directory,false);  
                reader.undeleteAll();  
                
                reader.close();  
            } catch (CorruptIndexException e) {  
                // TODO Auto-generated catch block   
                e.printStackTrace();  
            } catch (IOException e) {  
                // TODO Auto-generated catch block   
                e.printStackTrace();  
            }  
              
        }
		
		 //清空回收站,强制优化   
        public void forceDelete()  
        {  
            IndexWriter writer=null;  
            try {  
                writer=new IndexWriter(directory, new IndexWriterConfig(Version.LUCENE_35,  
                        new StandardAnalyzer(Version.LUCENE_35)));  
                writer.forceMergeDeletes(); 
            } catch (CorruptIndexException e) {  
                e.printStackTrace();  
            } catch (LockObtainFailedException e) {  
                e.printStackTrace();  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
            finally{  
                if (writer!=null) {  
                    try {  
                        writer.close();  
                    } catch (CorruptIndexException e) {  
                        // TODO Auto-generated catch block   
                        e.printStackTrace();  
                    } catch (IOException e) {  
                        // TODO Auto-generated catch block   
                        e.printStackTrace();  
                    }  
                }  
            }  
        }  

        public void merge()  
        {  
            IndexWriter writer=null;  
            try {  
                writer=new IndexWriter(directory, new IndexWriterConfig(Version.LUCENE_35,  
                        new StandardAnalyzer(Version.LUCENE_35)));  
                //将索引合并为两段,建议不实用,开销太大
                writer.forceMerge(2);  
            } catch (CorruptIndexException e) {  
                e.printStackTrace();  
            } catch (LockObtainFailedException e) {  
                e.printStackTrace();  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
            finally{  
                if (writer!=null) {  
                    try {  
                        writer.close();  
                    } catch (CorruptIndexException e) {  
                        // TODO Auto-generated catch block   
                        e.printStackTrace();  
                    } catch (IOException e) {  
                        // TODO Auto-generated catch block   
                        e.printStackTrace();  
                    }  
                }  
            }  
        }  


        //更新索引   
        public void update()  
        {  
//            lucene本身不支持更新 
//            通过删除索引然后再建立索引来更新 
              
              IndexWriter writer=null;  
               Document doc=null;  
               try {  
                writer =new IndexWriter(directory,new IndexWriterConfig(Version.LUCENE_35,   
                           new StandardAnalyzer(Version.LUCENE_35)));  
                 
                  
                    doc=new Document();  
                    doc.add(new Field("id","111",Field.Store.YES,Field.Index.NOT_ANALYZED_NO_NORMS));  
                    doc.add(new Field("emails",emails[0],Field.Store.YES,Field.Index.ANALYZED));  
                    doc.add(new Field("contents",contents[0],Field.Store.NO,Field.Index.ANALYZED));  
                    doc.add(new Field("name",names[0],Field.Store.YES,Field.Index.NOT_ANALYZED_NO_NORMS));  
                    writer.updateDocument(new Term("id","1"), doc);   
                  
            } catch (CorruptIndexException e) {  
                // TODO Auto-generated catch block   
                e.printStackTrace();  
            } catch (LockObtainFailedException e) {  
                // TODO Auto-generated catch block   
                e.printStackTrace();  
            } catch (IOException e) {  
                // TODO Auto-generated catch block   
                e.printStackTrace();  
            }  
               finally{  
                   if(writer!=null)  
                   {  
                      try {  
                        writer.close();  
                    } catch (CorruptIndexException e) {  
                        // TODO Auto-generated catch block   
                        e.printStackTrace();  
                    } catch (IOException e) {  
                        // TODO Auto-generated catch block   
                        e.printStackTrace();  
                    }     
                   }  
               }      
        }  
        
        public void setDate()  
        {  
            SimpleDateFormat sdf=new SimpleDateFormat("yyyy-mm-kk"); //时间转换,这个不会有点丢人
            try {  
                dates=new Date[ids.length];  
                dates[0]=sdf.parse("2010-08-17");  
                dates[1]=sdf.parse("2011-02-17");  
                dates[2]=sdf.parse("2012-03-17");  
                dates[3]=sdf.parse("2011-04-17");  
                dates[4]=sdf.parse("2012-05-17");  
                dates[5]=sdf.parse("2011-07-17");  
            } catch (Exception e) {  
                e.printStackTrace();  
                // TODO: handle exception   
            }  
        }   

        public void search()  
        {  
            try {  
               IndexReader reader=IndexReader.open(directory);  
               IndexSearcher searcher=new IndexSearcher(reader);  
               TermQuery query=new TermQuery(new Term("content","like"));  
               TopDocs tds=searcher.search(query, 10);  
                 
               for(ScoreDoc sd:tds.scoreDocs)  
               {  
                   Document doc=searcher.doc(sd.doc);  
                   System.out.println("("+sd.doc+"-"+doc.getBoost()+"-"+sd.score+")--------------"+doc.get("name")+"["+doc.get("email")+"]--------------------"  
                           +doc.get("id")+","+doc.get("attach")+","+doc.get("date")); 
                   
               }  
           } catch (CorruptIndexException e) {  
               // TODO Auto-generated catch block   
               e.printStackTrace();  
           } catch (IOException e) {  
               // TODO Auto-generated catch blocket   
               e.printStackTrace();  
           }  
        }  

  

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值