欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-04-03 14:09:29
...
首页,大家可以先看下这个文章引用【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-----------------------