1、导包
2、实现步骤
第一步:创建一个java工程,并导入jar包。
第二步:创建一个indexwriter对象。
1)指定索引库的存放位置Directory对象
2)指定一个分析器,对文档内容进行分析。
第二步:创建document对象。
第三步:创建field对象,将field添加到document对象中。
第四步:使用indexwriter对象将document对象写入索引库,此过程进行索引创建。并将索引和document对象写入索引库。
第五步:关闭IndexWriter对象。
3、Field域的属性及其子类
是否分析:是否对域的内容进行分词处理。前提是我们要对域的内容进行查询。
是否索引:将Field分析后的词或整个Field值进行索引,只有索引方可搜索到。
比如:商品名称、商品简介分析后进行索引,订单号、身份证号不用分析但也要索引,这些将来都要作为查询条件。
是否存储:将Field值存储在文档中,存储在文档中的Field才可以从Document中获取
比如:商品名称、订单号,凡是将来要从Document中获取的Field都要存储。
是否存储的标准:是否要将内容展示给用户
Field类 | 数据类型 | Analyzed 是否分析 | Indexed 是否索引 | Stored 是否存储 | 说明 |
StringField(FieldName, FieldValue,Store.YES)) | 字符串 | N | Y | Y或N | 这个Field用来构建一个字符串Field,但是不会进行分析,会将整个串存储在索引中,比如(订单号,姓名等) 是否存储在文档中用Store.YES或Store.NO决定 |
LongField(FieldName, FieldValue,Store.YES) | Long型 | Y | Y | Y或N | 这个Field用来构建一个Long数字型Field,进行分析和索引,比如(价格) 是否存储在文档中用Store.YES或Store.NO决定 |
StoredField(FieldName, FieldValue) | 重载方法,支持多种类型 | N | N | Y | 这个Field用来构建不同类型Field 不分析,不索引,但要Field存储在文档中 |
TextField(FieldName, FieldValue, Store.NO) 或 TextField(FieldName, reader)
| 字符串 或 流 | Y | Y | Y或N | 如果是一个Reader, lucene猜测内容比较多,会采用Unstored的策略. |
4、代码实现
@Test
public void createIndex() throws IOException {
// 1、创建一个indexwriter对象。
// 1)指定索引库的存放位置Directory对象
// 2)指定一个分析器,对文档内容进行分析。
Directory directory = FSDirectory.open(new File("E:\\eclipse-workspace\\ww_19lucene&solr\\index"));
//索引库放到内存中
// Directory directory = new RAMDirectory();
//创建一个标准分析器
Analyzer analyzer = new StandardAnalyzer();
//第一个参数:Lucene的版本号(当项目中Lucene的jar不只一个时,可以通过这个选择,latest表示最新版本),第二个参数分析器
IndexWriterConfig indexWriterConfig = new IndexWriterConfig(Version.LATEST, analyzer);
IndexWriter indexWriter = new IndexWriter(directory, indexWriterConfig);
//原始文档的路径
File dir = new File("E:\\eclipse-workspace\\ww_19lucene&solr\\searchsource");
//遍历原始文档路径下的所有文档
for (File file : dir.listFiles()) {
//获得文件名、文件路径、文件大小、文件内容
String fileName = file.getName();
String filePath = file.getPath();
Long fileSize = FileUtils.sizeOf(file);
String fileContent = FileUtils.readFileToString(file);
// 2、创建document对象。
// 3、创建field对象,将field添加到document对象中。
//创建field对象
Field fileNameField = new TextField("fileName", fileName, Store.YES);
Field filePathField = new StoredField("filePath", filePath);
Field fileSizeField = new LongField("fileSize", fileSize, Store.YES);
Field fileContentField = new TextField("fileContent", fileContent, Store.YES);
//创建document对象,将field添加到document对象中
Document document = new Document();
document.add(fileNameField);
document.add(filePathField);
document.add(fileSizeField);
document.add(fileContentField);
// 4、使用indexwriter对象将document对象写入索引库,此过程进行索引创建。并将索引和document对象写入索引库。
indexWriter.addDocument(document);
}
// 5、关闭IndexWriter对象。
indexWriter.close();
}
创建索引后,每一个document会有一个id ,从0开始
5、使用luke查看索引
工具结构:
开始,找到索引的位置