Lucene应用实战(二)——Field域的使用及索引库的维护

本文深入探讨了Lucene中的Field域,包括其三大属性:是否分词、是否索引和是否存储。介绍了不同类型的Field及其应用,并展示了索引库的添加、更新、删除和全部删除操作。通过示例代码,读者可以理解如何维护Lucene索引库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Field域的使用及索引库的维护

前言

在前面我们对Lucene的使用进行了简单的demo实战,本文我们详细来说明下Lucene中的Field域的使用及索引库维护的相关操作。

Fileld域的使用

简介

Lucene存储对象是以Document为存储单元,对象中相关的属性值则存放到Field中。

Field是文档中的域,包括Field名和Field值两部分,一个文档可以包括多个Field,Document只是Field
的一个承载体,Field值即为要索引的内容,也是要搜索的内容。

Field有三大属性:

  1. 是否分词(tokenized)
  • 是:作分词处理,即将Field值进行分词,分词的目的是为了索引

比如:商品名称、商品简介等,这些内容用户要输入关键字搜索,由于搜索的内容格式不固定、内容多需要
分词后将语汇单元索引。

  • 否:不做分词处理

​ 比如:订单号、身份证号等

  1. 是否索引(indexed)
  • 是:进行索引。将Field分词后的词或整个Field值进行索引,索引的目的是为了搜索。

    比如:商品名称、商品简介分词后进行索引,订单号、身份证号不用分词但要索引,这些将来都要作为查询
    条件。

  • 否:不索引。该域的内容无法搜索到。

    比如:文件路径、图片路径等,不用作为查询条件的不用索引。

  1. 是否存储(stored)
  • 是:将Field值存储在文档中,存储在文档中的Field才可以从Document中获取。

    比如:商品名称、订单号,凡是将来要从Document中获取的Field都要存储。

  • 否:不存储Field值,不存储的Field无法通过Document获取

    比如:商品简介,内容较大不用存储。如果要向用户展示商品简介可以从系统的关系数据库中获取商品简
    介。

    如果需要商品描述,则根据搜索出的商品ID去数据库中查询,然后显示出商品描述信息即可。

常用类型

Field对应的类是org.apache.lucene.document.Field,该类实现了org.apache.lucene.index.IndexableField接口,代表用于indexing的一个字段。Field类比较
底层一些,所以Lucene实现了许多Field子类,用于不同的场景。

Field的常用类型及用法如下表格所示:

Field类型 数据类型 是否分词 是否索引 是否存储 说明
StringField(FieldName, FieldValue, Store.YES) 字符串 N Y Y/N 字符串类型Field, 不分词, 作为一个整体进行索引(如: 身份证 号, 订单编号), 是否需要存储由Store.YES或Store.NO决定
TextField(FieldName, FieldValue, Store.NO) 文本类型 Y Y Y/N 文本类型Field, 分词并且索引, 是否需要存储由Store.YES或 Store.NO决定
LongField(FieldName, FieldValue, Store.YES) 或 LongPoint(String name, int… point)等 数值代表型 Y Y Y/N 在Lucene 6.0中,LongField替换为LongPoint,IntField替换 为IntPoint,FloatField替换为FloatPoint,DoubleField替换 为DoublePoint。对数值型字段索引,索引不存储。要存储结 合StoredField即可。
StoredField(FieldName, FieldValue) 支持多种类型 N N Y 构建不同类型的Field, 不分词, 不索引, 要存储. (如: 商品图片路 径)

Field应用代码

 @Test
    public void createIndex() throws Exception {
   
        // 1.采集数据
        Book  booka  = new Book();
        List<Book> bookList = new ArrayList<Book>();
        booka.setId(1);
        booka.setDesc("Lucene Core is a Java library providing powerful indexing and search features, as well as spellchecking, hit highlighting and advanced analysis/tokenization capabilities. The PyLucene sub project provides Python bindings for Lucene Core. ");
        booka.setName("Lucene");
        booka.setPrice(100.45f);
        bookList.add(booka);

        Book  bookb  = new Book();
        bookb.setId(11);
        bookb
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员资料站

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值