全文索引工具中,都是由这样三部分组成:
1,索引部分 2,分词部分 3,搜索部分
创建索引过程:1创建directory,2创建writer(索引),3创建文档并且添加索引 4查询索引的基本信息 5 删除和更新索引。
模糊查询:
Query query=new FuzzyQuery(new Term(“name”,”make”));
public void index(){
//创建directory
//创建indexwriter
//创建document对象
//为document添加field
//通过indexwriter添加文档到索引中
}
存储域选项:
Field.Store.Yes /No
设置为Yes表示把这个域的内容完全存储到文件中,方便进行文本的还原 doc.get
设置为No表示把这个域的内容不存储到文件中,但可以被索引,此时内容无法被还原。
摘要需要存储。
索引域选项:
Field.Index
.ANALYZED:进行分词和索引,适用于标题,内容等
.NOT_ANALYZED 进行索引,但是不进行分词,如身份证号码,姓名,id等,适用于精确索引
.ANALYZED_NOT_NORMS:进行分词但是不存储norms信息,这个norms中包括了创建索引的时间和权值等信息(评分,显示的排序信息)
.NOT_NORMS既不进行分词,也不存储norms信息(很少用)
.NO不进行索引。
最佳实践: NOT_ANALYZED_NOT_NORMS YES 标示符(主键,文件名),电话号码, 身份证号码,姓名,日期
ANALYZED YES 文档标题和摘要
ANALYZED NO 文档正文
NO YES 文档类型,数据库主键(不进行索引)
NOT_ANALYZED NO 隐藏关键字
添加索引:writer.add(doc)
更新索引|替换索引:writer.updateDocument(new Term("id","1"), doc);
重新索引:writer.deleteall();
删除索引:writer.deleteDocuments(new Term("id","1"));
彻底删除索引:writer.forceMergeDeletes();
恢复删除的索引:reader.undeleteAll();
查询索引:readerxxx
域能加权,文档不能加权:setBoost
indexreader最好建立成单例的
delete可以用reader.deletDocument(new term(id,1))
不关闭索引可以用writer.conmit