Lucene-5.5.2 Field域创建时,分词与不分词的理解

阅读更多
首页,大家可以先看下这个文章引用【 http://iamyida.iteye.com/blog/2194345】
我以前是用的是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-----------------------

你可能感兴趣的:(Lucene,Field,分词)