我以前是用的是lucene 3.X版本,后来某些原因要更新到lucene 5.x版本,所以选择了5.5.2版本,在升级的过程中查阅了资料。其中就是在LUCENE4 版本及以前都是使用
doc.add(new Field(groupName, dwgContent, Field.Store.NO,Field.Index.ANALYZED)); doc.add(new Field("display_has_dwg", "true", Field.Store.YES, [b]Field.Index.NOT_ANALYZED[/b]));
Field.Index 这样的方式判断是否分词创建索引。
所以我遇到的第一个问题,以下的字段域我怎么样不分词创建索引呢?就直接使用new StringField这个子类即可。
doc.add(new StringField("lucene_mainid", luceneTask.getTablenames()+"."+luceneTask.getTablekey(), Field.Store.YES));
原因如下:
在lucene 5.x版本后,对以前的Field进行了更多的细化,如IntField, LongField, FloatField, DoubleField, BinaryDocValuesField, NumericDocValuesField, SortedDocValuesField, StringField, TextField, StoredField 这些类都继承了Field类。
接下来我们看下StringField这个类的源码:
static { TYPE_NOT_STORED.setOmitNorms(true); TYPE_NOT_STORED.setIndexOptions(IndexOptions.DOCS); [b] TYPE_NOT_STORED.setTokenized(false);[/b] TYPE_NOT_STORED.freeze(); TYPE_STORED.setOmitNorms(true); TYPE_STORED.setIndexOptions(IndexOptions.DOCS); TYPE_STORED.setStored(true); [b] TYPE_STORED.setTokenized(false);[/b] TYPE_STORED.freeze(); }
以上源码我们看到 TYPE_STORED.setTokenized(false);都是false.内置默认是不分词的。所以我们直接new StringField即可。
-------------------------------------不懂的加 q_q:153 654 8741-----------------------