编程点滴.LUCENE的FILED选项

争取每日记录一些

Index选项

Index.ANALYZED – 索引并分词(适用于body, title, abstract等.).
Index.NOT_ANALYZED – 索引但不分词,可以使用NORM方式.(可以人为干预提权)

Index.ANALYZED_NO_NORMS – 索引并分词但不使用NORM方式(不可认为提权)

Index.NOT_ANALYZED_NO_NORMS – 索引但不分词也不使用NORM方式(经常用到,存储标志值最好的方式.)

Index.NO – 不索引

 

Store选项

Store.YES – 存储

Store.NO  – 不存储

 

TermVector选项

(除TermVector.NO外其他必须要求Index选项为Index.ANALYZED或Index.NOT_ANALYZED)

TermVector.YES – 最基本的向量存储(特殊性,数量,在哪个文档)

TermVector.WITH_POSITIONS – TermVector.YES+位置
TermVector.WITH_OFFSETS – TermVector.YES+偏移

TermVector.WITH_POSITIONS_OFFSETS – TermVector.YES+位置+偏移

TermVector.NO – 不做向量存储

 

各选项组合应用场景

Index

Store

TermVector

事例

NOT_ANALYZ

ED_NO_NORMS

YES

NO

主键,电话,身份证号,URLs,日期和需要排序的字段

ANALYZED

YES

WITH_POSITIONS_OFFSETS

文档标题,摘要.

ANALYZED

NO

WITH_POSITIONS_OFFSETS

文档主体

NO

YES

NO

文档类型,数据库主键(如果不需要检索该字段的话)

NOT_ANALYZED

NO

NO

隐藏字段

 

排序的注意事项

如果需要排序的字段是数字就用NumericField,如果是文本,一定要记得使用FIELD.Index.NOT_ANALYZED.

如果不需要提权则应该使用NOT_ANALYZED_NO_NORMS

 

多值字段的保存

在同一个Document下可以给同一个字段赋不同的值.例如

Document doc = new Document();
for (int i = 0; i < authors.length; i++) {
      doc.add(new Field("author", authors[i],
                                    Field.Store.YES,
                                    Field.Index.ANALYZED));
}

LUCENE.NET QQ交流群(81361051) 

posted @ 2010-08-26 17:00  寒 刚入门  阅读(2095)  评论(0编辑  收藏  举报
刚入门的寒