lucene全文搜索之三:生成索引字段,创建索引文档(给索引字段加权)基于lucene5.5.3
前言:上一章中我们已经实现了索引器的创建,但是我们没有索引文档,本章将会讲解如何生成字段、创建索引文档,给字段加权以及保存文档到索引器目录
luncene5.5.3集合jar包下载地址:http://download.csdn.net/detail/eguid_1/9677589
一、创建索引文档
一个索引目录可以放多个索引文档,每个索引文档由多个索引字段组成,索引字段由要索引的字段名和字段内容以及权重值组成
1、构建索引字段并加权
/** * 创建索引字段 * @param boost * -权重值 * @param fieldName * - 字段名 * @param statement * -内容 * @param fieldType * -字段存储类型 * @return */ public Field createField(String fieldName, String statement, FieldType fieldType, Float boost) { Field field = null; if (fieldName != null && statement != null && fieldType != null) { field = new Field(fieldName, statement, fieldType); if (boost != null) { field.setBoost(boost); } } return field; } /** * 创建索引字段 * * @param fieldName * @param reader * @param type * @param boost * @return */ public Field createField(String fieldName, Reader reader, FieldType type, Float boost) { Field field = null; if (fieldName != null && reader != null) { field = new Field(fieldName, reader, type); if (boost != null) { field.setBoost(boost); } } return field; } /** * 创建索引字段 * * @param fieldName * @param tokenStream * @param type * @param boost * @return */ public Field createField(String fieldName, TokenStream tokenStream, FieldType type, Float boost) { Field field = null; if (fieldName != null && tokenStream != null) { field = new Field(fieldName, tokenStream, type); if (boost != null) { field.setBoost(boost); } } return field; } /** * 创建索引字段 * * @param fieldName * @param value * @param type * @param boost * @return */ public Field createField(String fieldName, byte[] value, FieldType type, Float boost) { return value != null ? createField(fieldName, value, 0, value.length, type, boost) : null; } /** * 创建索引字段 * * @param fieldName * @param value * @param offset * @param length * @param type * @param boost * @return */ public Field createField(String fieldName, byte[] value, int offset, int length, FieldType type, Float boost) { Field field = null; if (fieldName != null && value != null && type != null) { field = new Field(fieldName, value, offset, length, type); if (boost != null) { field.setBoost(boost); } } return field; }
2、创建索引文档
/** * 创建索引文档 * * @return */ public Document createDocument() { return new Document(); }
二、添加字段到索引文档
/** * 把字段存放到索引文档 * * @param document * @param field * @return */ public Document addFiled(Document document, Field field) { if (field != null) { document.add(field); } return document; } /** * 批量存放字段到索引文档 * @param document * @param fields * @return */ public Document addFiledList(Document document, Field... fields) { if (fields != null && fields.length > 0) { for (Field field : fields) { document.add(field); } } return document; }
三、给索引器添加索引文档
使用上一章中的方法把生成的文档添加到索引中
事实上我们常把索引文档根据不同分类保存到不同的索引目录,再搜索时可以根据不同索引目录进行搜索。
例如:
Analyzer analyzer=createAnalyzer(false); Directory dir=createDirectory(null, "d:","dir","search"); IndexWriterConfig conf=createIndexConf(analyzer, OpenMode.CREATE_OR_APPEND, false); IndexWriter index=createIndex(dir, conf); //创建一个文档 Document doc=createDocument(); String[] states = new String[] {"欢迎来到eguid的博客", "欢迎大家来到eguid的技术博客", "欢迎大家来到eguid的技术博客,很开心能和大家一起分享开源技术"}; //创建字段 Field[] fields=createFields("字段名", states, TextField.TYPE_STORED, 1.1f); //批量增加字段到索引文档 addFiledList(doc, fields); //把索引文档保存到索引器 index.addDocument(doc);这样就把添加了一个索引,想要搜索这个索引,那么接下来让我们创建搜索器吧
下一章:lucene全文搜索之四:创建索引搜索器、6种文档搜索器实现以及搜索结果分析(结合IKAnalyzer分词器的搜索器)基于lucene5.5.2
本文来自博客园,作者:eguid,没有作者允许禁止转载,取得作者同意后转载需注明作者名和原文链接:https://www.cnblogs.com/eguid/p/6821574.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端