1.域索引选项
域索引选项(Filed.Index.*) 通过倒排索引来控制域文本是否可被搜索
2.域存储选项
Field.Store.* 用来确定是否需要存储域的真实值,以便后续搜索时能恢复这个值
3.多值域的处理
Document doc=new Document();
for(String auther :authers){
doc.add("auther",auther,Field.Store.YES,Field.Index.NOT_ANALYZED);
}
4.对文档和域进行加权操作
加权操作可以在索引期间完成,也可以在搜索期间完成。搜索期间的加权操作会更加动态化,因为每次搜索操作都可以根据不通的加权因子独立选择加权或者不加权,但这个策略也可能要稍微多消耗点CPUX效率。由于搜索期间的加权操作太动态化,该策略还可以将加权选项提供于控制,如用选择框询问用户“是否对最近修改过的文件进行加权。无论在什么时期进行加权都需要小心:过多的加权操作,特别是在用户界面没有提示的相应文档已经被加权操作的情况下。这可能会使用户搜索到很多用户不关心的东西(如百度的竞价排名),文档的加权操作:doc.setBoots(float).默认的加权因子是1.0,域加权操作也是如此!
5.索引数字,日期和时间
doc.add(new NumericField("price").setDouble(20.99));
doc.add(new NumericField("timestamp").setLongValue(new Date().getTIme()));
6.域截取
lucene3.3 采用:
LimitTokenCountAnalyzer limitAna=new LimitTokenCountAnalyzer(new StandardAnalyzer(Version.LUCENE_33), 1000);
7.索引的锁机制
IndexWriter writer=getWriter(); //当前Writer对象获得了文件锁
writer.setInfoStream(System.out);//索引的调试信息
IndexWriter writer1=getWriter(); //这里将抛出LockObtainFailedException
Document doc=new Document();
doc.add(new Field("name","lzy",Field.Store.YES,Field.Index.ANALYZED));
doc.add(new NumericField("age").setIntValue(23));
writer.addDocument(doc);
writer.optimize();
writer.close();