全文索引工具中,都是由这样三部分组成:数据库
1,索引部分 2,分词部分 3,搜索部分工具
建立索引过程:1建立directory,2建立writer(索引),3建立文档而且添加索引 4查询索引的基本信息 5 删除和更新索引。spa
模糊查询:orm
Query query=new FuzzyQuery(new Term(“name”,”make”));对象
public void index(){排序
//建立directory索引
//建立indexwriter文档
//建立document对象get
//为document添加fieldit
//经过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