从 01 开始 从 01 开始
首页
  • 📚 计算机基础

    • 计算机简史
    • 数字电路
    • 计算机组成原理
    • 操作系统
    • Linux
    • 计算机网络
    • 数据库
    • 编程工具
    • 装机
  • 🎨 前端

    • Node
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Windows 使用技巧
  • 手机
  • 最全面的输入法教程
  • 最全面的浏览器教程
  • Office
  • 图片类工具
  • 效率类工具
  • RSS
  • 码字工具
  • 各大平台
  • 校招
  • 五险一金等
  • 职场规划
  • 关于离职
  • 杂谈
  • 📖 读书

    • 读书工具
    • 读书笔记
  • 🌍 英语

    • 从零开始学英语
    • 英语兔的相关视频
    • Larry 想做技术大佬的相关视频
  • 🏛️ 政治

    • 反腐
    • GFW
    • 404 内容
    • 审查与自我审查
    • 互联网
    • 战争
  • 💰 经济

    • 关于税
    • 理财
  • 💪 健身

    • 睡眠
    • 皮肤
    • 口腔健康
    • 学会呼吸
    • 健身日志
  • 🏠 其他

    • 驾驶技能
    • 租房与买房
    • 厨艺
  • 电影

    • 电影推荐
  • 电视剧
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 小说
  • 关于本站
  • 关于博主
  • 打赏
  • 网站动态
  • 友人帐
  • 从零开始搭建博客
  • 搭建邮件服务器
  • 本站分享
  • 🌈 生活

    • 2022
    • 2023
    • 2024
    • 2025
  • 📇 文章索引

    • 文章分类
    • 文章归档

晓林

程序猿,自由职业者,博主,英语爱好者,健身达人
首页
  • 📚 计算机基础

    • 计算机简史
    • 数字电路
    • 计算机组成原理
    • 操作系统
    • Linux
    • 计算机网络
    • 数据库
    • 编程工具
    • 装机
  • 🎨 前端

    • Node
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Windows 使用技巧
  • 手机
  • 最全面的输入法教程
  • 最全面的浏览器教程
  • Office
  • 图片类工具
  • 效率类工具
  • RSS
  • 码字工具
  • 各大平台
  • 校招
  • 五险一金等
  • 职场规划
  • 关于离职
  • 杂谈
  • 📖 读书

    • 读书工具
    • 读书笔记
  • 🌍 英语

    • 从零开始学英语
    • 英语兔的相关视频
    • Larry 想做技术大佬的相关视频
  • 🏛️ 政治

    • 反腐
    • GFW
    • 404 内容
    • 审查与自我审查
    • 互联网
    • 战争
  • 💰 经济

    • 关于税
    • 理财
  • 💪 健身

    • 睡眠
    • 皮肤
    • 口腔健康
    • 学会呼吸
    • 健身日志
  • 🏠 其他

    • 驾驶技能
    • 租房与买房
    • 厨艺
  • 电影

    • 电影推荐
  • 电视剧
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 小说
  • 关于本站
  • 关于博主
  • 打赏
  • 网站动态
  • 友人帐
  • 从零开始搭建博客
  • 搭建邮件服务器
  • 本站分享
  • 🌈 生活

    • 2022
    • 2023
    • 2024
    • 2025
  • 📇 文章索引

    • 文章分类
    • 文章归档
  • JavaSE

  • JavaSenior

  • JavaEE

  • JavaWeb

  • Spring

  • 主流框架

    • Redis

    • Mybatis

    • Lucene

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

    • MQ

    • MyCat

    • Lombok

  • SpringMVC

  • SpringBoot

  • 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,读者可以通过切换分支来查看本文的示例代码

上次更新: 2025/5/17 12:26:09
分析器
索引库的维护

← 分析器 索引库的维护→

最近更新
01
吐槽一下《僵尸校园》
05-15
02
2025 年 4 月记
04-30
03
山西大同 “订婚强奸案” 将会给整个社会带来的影响有多严重? - 知乎 转载
04-26
更多文章>
Theme by Vdoing | Copyright © 2022-2025 | 粤 ICP 备 2022067627 号 -1 | 粤公网安备 44011302003646 号 | 点击查看十年之约
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式