Practice Every Day_16(添加索引)
来源:互联网 发布:java 格式化数字 编辑:程序博客网 时间:2024/06/06 16:30
今天敲的代码是添加索引的代码,之前看视频讲解的是更新索引,但有很大的局限(必须先删除之后再添加索引),现在学了实时索引之后就不用那样做了,可以直接向原有索引里添加新的索引。以下是代码:
//创建IndexField类,可以通过这个类来添加需要创建索引的内容
package Lucy;
import java.security.MessageDigest;
public class IndexField
{
private String id;
private String title;
private String content;
public void setId(String id)
{
this.id=id;
}
public String getId()
{
return id;
}
public void setTitle(String title)
{
this.title=title;
}
public String getTitle()
{
return title;
}
public void setContent(String content)
{
this.content=content;
}
public String getContent()
{
return content;
}
}
//通过该类创建管理Index的NRTManager
package Lucy;
import java.io.File;
import java.io.IOException;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
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.search.IndexSearcher;
import org.apache.lucene.search.NRTManager;
import org.apache.lucene.search.NRTManagerReopenThread;
import org.apache.lucene.search.SearcherManager;
import org.apache.lucene.search.SearcherWarmer;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;
public class LuceneContext
{
private static LuceneContext instance;
private static final String path="e:Lucene_Index";
private static IndexWriter writer;
private static Analyzer analyzer;
private static NRTManager nrtMgr;
private static SearcherManager mgr;
private static Directory directory;
private static Version version;
public static LuceneContext getInstance()
{
if(instance==null)
{
init();
instance=new LuceneContext();
}
return instance;
}
private static void init()
{
try
{
directory=FSDirectory.open(new File(path));
version=Version.LUCENE_35;
//String s=LuceneContext.class.getClassLoader().getResource("data").getPath();
analyzer=new StandardAnalyzer(version);
writer=new IndexWriter(directory,new IndexWriterConfig(version,analyzer));
nrtMgr=new NRTManager(writer,new SearcherWarmer()
{
public void warm(IndexSearcher s)throws IOException
{
System.out.println("reopen");
}
}
);
NRTManagerReopenThread reopen=new NRTManagerReopenThread(nrtMgr,5.0,0.025);
reopen.setDaemon(true);
reopen.start();
}
catch(IOException e)
{
e.printStackTrace();
}
}
public IndexSearcher getSearcher()
{
return mgr.acquire();
}
public void releaseSearcher(IndexSearcher searcher)
{
try{
mgr.release(searcher);
}
catch(IOException e)
{
e.printStackTrace();
}
}
public static void commitIndex() throws CorruptIndexException, IOException
{
writer.commit();
}
public NRTManager getNRTManager()
{
return nrtMgr;
}
public static void check() throws IOException
{ //检查索引是否被正确建立(打印索引)
FSDirectory directory = FSDirectory.open(new File(path));
IndexReader reader = IndexReader.open(directory);
for(int i = 0;i<reader.numDocs();i++)
{
System.out.println(reader.document(i));
}
}
}
//测试类
package Lucy;
import java.io.IOException;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.search.NRTManager;
public class Test
{
public static void main(String[] args) throws IOException
{
IndexField fields=new IndexField();
fields.setId("01");
fields.setTitle("我的大学");
fields.setContent("我的大学坐落在美丽的海滨城市--烟台");
LuceneContext.check();
//addIndex(fields);
// LuceneContext.commitIndex();
}
//通过该方法直接添加索引
public static void addIndex(IndexField fields)
{
try{
NRTManager nrtMgr=LuceneContext.getInstance().getNRTManager();
Document doc=field2Doc(fields);
nrtMgr.addDocument(doc);
}
catch(IOException e)
{
e.printStackTrace();
}
}
//通过该方法添加Document的域
private static Document field2Doc(IndexField field)
{
Document doc=new Document();
doc.add(new Field("id",field.getId(),Field.Store.YES,Field.Index.NOT_ANALYZED));
doc.add(new Field("title",field.getTitle(),Field.Store.YES,Field.Index.ANALYZED));
doc.add(new Field("content",field.getContent(),Field.Store.YES,Field.Index.ANALYZED));
return doc;
}
}
不足之处:1、存在重复建立索引的问题
2、当只需要添加一个域是没法执行- Practice Every Day_16(添加索引)
- Practice Every Day_9(更新索引)
- Practice Every Day_14(多字段搜索和多索引搜索)
- Practice Every Day_2
- Practice Every Day_3
- Practice Every Day_4
- Practice Every Day_5
- Practice Every Day_8
- Practice Every Day_13
- Practice Every Day_7(Lucene3.5小练习)
- Java集合框架(二)day_16
- Practice Every Day_6 (Lucene 小练习)
- Practice Every Day_17(Map集合小练习)
- Practice Every Day_11(用HtmlParser解析Html文件)
- Practice Every Day_12(精确搜索和模糊搜索)
- Robin Hu的专栏Let's practice improving every day
- Map集合day_16
- Lucene添加删除索引(增量索引)
- 本人将陆续发布自己所做的无线视频监控小车视频及资料
- java例程练习(多线程[yield()方法])
- Android自定义View研究(八)--自定义View总结
- CFI查询(五)
- 设计模式学习笔记——模板方法模式
- Practice Every Day_16(添加索引)
- POJ Flip Game
- 我喜欢的小说杀神最新章节 第九百二十章 玩的溜啊!
- POJ 1061 青蛙的约会
- 宏定义使用
- ubuntu11.10 中gedit 中文乱码显示解决
- rgba()和opacity的使用
- Android自定义View研究(七)--XML中布局自定义View时View触摸原点问题
- -1.#IND0 1.#qnan0