从01开始 从01开始
首页
  • 计算机科学导论
  • 数字电路
  • 计算机组成原理

    • 计算机组成原理-北大网课
  • 操作系统
  • Linux
  • Docker
  • 计算机网络
  • 计算机常识
  • Git
  • JavaSE
  • Java高级
  • JavaEE

    • Ant
    • Maven
    • Log4j
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • Servlet
  • Spring
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC
  • SpringBoot
  • 学习网课的心得
  • 输入法
  • 节假日TodoList
  • 其他
  • 关于本站
  • 网站日记
  • 友人帐
  • 如何搭建一个博客
GitHub (opens new window)

peterjxl

人生如逆旅,我亦是行人
首页
  • 计算机科学导论
  • 数字电路
  • 计算机组成原理

    • 计算机组成原理-北大网课
  • 操作系统
  • Linux
  • Docker
  • 计算机网络
  • 计算机常识
  • Git
  • JavaSE
  • Java高级
  • JavaEE

    • Ant
    • Maven
    • Log4j
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • Servlet
  • Spring
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC
  • SpringBoot
  • 学习网课的心得
  • 输入法
  • 节假日TodoList
  • 其他
  • 关于本站
  • 网站日记
  • 友人帐
  • 如何搭建一个博客
GitHub (opens new window)
  • JavaSE

  • JavaSenior

  • JavaEE

  • JavaWeb

  • Spring

  • 主流框架

    • Redis

    • Mybatis

    • Lucene

      • 全文检索的概念
      • Lucene概述
      • Lucene入门案例
      • 分析器
      • 常见的Field
        • 前言
        • Field域的属性
        • 常见的Field的子类
        • 重新创建索引库
        • 源码
      • 索引库的维护
      • Lucene索引库查询
      • Lucene
    • Elasticsearch

    • MQ

    • MyCat

    • Lombok

    • 主流框架
  • SpringMVC

  • SpringBoot

  • Java并发

  • Java源码

  • JVM

  • 韩顺平

  • Java
  • Java
  • 主流框架
  • Lucene
2023-05-16
目录

常见的Field

# 35.常见的Field

除了TextField,还有不少其他Field对象,本文就来介绍下它们   ‍

# 前言

首先,不是所有内容都适合用TextField​(其本质是String)保存:

  • 例如文档大小是数字类型,如果要做数值范围搜索的话(例如找大于多少kb的原始文档),用文本类型存储就不合适
  • 还有Path路径,只是存储,如果也分词的话,没必要,而TextField​默认是分词的

‍

‍

# Field域的属性

此时我们就得谈谈Field域的属性:

  • 是否分析:是否对域的内容进行分词处理。前提是我们要对域的内容进行查询。
  • 是否索引:将 Field 分析后的词,或整个 Field 值进行索引,只有索引 才可被搜索到。比如:商品名称、商品简介分析后进行索引,订单号、身份证号不用分析但也要索引,这些将来都要作为查询条件。
  • 是否存储:将Field值存储在文档中,存储在文档中的Field才可以从Document中获取,比如商品名称、订单号,凡是将来要从Document中获取的Field都要存储。

注意存储不存储,是不影响查询的,我们查询的是索引,而不是内容。但如果要在查询后展示内容,就必须存储

‍

# 常见的Field的子类

  • ​StringField(FieldName, FieldValue, Store.YES)​,字符串类型,这个Field用来构建一个字符串Field,但是不会进行分析(分词),会将整个串存储在索引中,比如(订单号,身份证号等)。是否存储在文档中用Store.YES或Store.NO决定
  • ​LongPoint(String name, long... point)​,Lone类型,还有IntPoint等类型存储数值类型的数据,让数值类型可以进行索引。但是不能存储数据,如果想存储数据还需要使StoredField。
  • ​StoredField(FieldName, FieldValue)​,重载方法,支持多种数据类型,这个Field用来构建不同类型Field不分析,不索引,但要Field存储在文档中
  • ​TextField(FieldName, FieldValue, Store.NO)​或TextField(FieldName, reader)​,如果是一个Reader, lucene猜测内容比较多,会采用Unstored的策略

‍

关于这几个Filed类型的属性,这里列一个表格:

Field类 数据类型 Analyzed是否分析
Indexed是否索引 Stored是否存储
StringField 字符串 N Y Y或N
LongPoint Long型 Y Y N
StoredField 支持多种数据类型 N N Y
TextField 字符串或流 Y Y Y或N

‍

比如订单号,身份证号等类型,可以用StringField存储,因为分词了没啥用;但是我们需要索引,将来可以用整个订单后或者身份证号来搜索。至于是否存储则按需使用。

比如文件路径可以用StoredField来存储,因为我们不需要分析和索引,只需存储就行。

而最后的TextField是用的比较多的,一般内容都是用这个。

‍

‍

# 重新创建索引库

我们重新创建一个类LuceneSecond.java,并创建方法createIndex,其代码和之前的代码几乎一样,除了以下几点:

‍

使用StoredField存储fieldPath,并创建fieldSize​和fieldSizeStore​的Field对象

// 4. 创建Field
// 参数1:域的名称, 参数2:域的内容, 参数3:是否存储
Field fieldName = new TextField("name", fileName, Field.Store.YES);
Field fieldPath = new StoredField("path", filePath);
Field fieldContent = new TextField("content", fileContent, Field.Store.YES);
// Field fieldSize = new TextField("size", String.valueOf(fileSize), Field.Store.YES);
Field fieldSize = new LongPoint("size", fileSize);
Field fieldSizeStore = new StoredField("size", fileSize);
1
2
3
4
5
6
7
8

‍

添加Field的时候,也加上新创建的2个Field对象:

// 4. 将field添加到document对象中。
Document document = new Document();
document.add(fieldName);
document.add(fieldPath);
document.add(fieldContent);
document.add(fieldSize);
document.add(fieldSizeStore);
1
2
3
4
5
6
7

‍

‍

然后我们删除之前的索引库,并重新创建。此时用luke查看,就会发现path和size是没有分词(Term的)

​

‍

但是path和size是存储了的,我们可以看documents选项卡:

​

‍

‍

# 源码

已将源码上传到Gitee (opens new window)或GitHub (opens new window)上。并且创建了分支demo3,读者可以通过切换分支来查看本文的示例代码

在GitHub上编辑此页 (opens new window)
上次更新: 2023/5/16 10:03:58
分析器
索引库的维护

← 分析器 索引库的维护→

Theme by Vdoing | Copyright © 2022-2023 粤ICP备2022067627号-1 粤公网安备 44011302003646号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式