默认分析器

查看之前代码,在new IndexWriterConfig()的时候没有指定分析器就调用了默认的分析器StandardAnalyzer,默认的标准的分析器就是对每个单词以空格进行拆分,而对于汉字就把每个汉字都拆分开为一个一个的字符。

IndexWriterConfig config = new IndexWriterConfig();
IndexWriter indexWriter = new IndexWriter(directory, config);

下面来写一段代码看看默认的分析器分词后的效果:

    //1、创建一个Director对象,指定索引库保存的位置。
    //把索引库保存在内存中
    //Directory directory = new RAMDirectory();
    //把索引库保存在磁盘
    Directory directory = FSDirectory.open(new File("E:\\教程\\01-lucene\\02.参考资料\\index").toPath());
    //2、基于Directory对象创建一个IndexWriter对象
    IndexWriterConfig config = new IndexWriterConfig();
    IndexWriter indexWriter = new IndexWriter(directory, config);
    //3、读取磁盘上的文件,对应每个文件创建一个文档对象。
    File dir = new File("E:\\教程\\01-lucene\\02.参考资料\\searchsource");
    File[] files = dir.listFiles();
    for (File f : files) {
        //取文件名
        String fileName = f.getName();
        //文件的路径
        String filePath = f.getPath();
        //文件的内容
        String fileContent = FileUtils.readFileToString(f, "utf-8");
        //文件的大小
        long fileSize = FileUtils.sizeOf(f);
        //创建Field
        //参数1:域的名称,参数2:域的内容,参数3:是否存储
        Field fieldName = new TextField("name", fileName, Field.Store.YES);
        //Field fieldPath = new TextField("path", filePath, Field.Store.YES);
        Field fieldPath = new StoredField("path", filePath);
        Field fieldContent = new TextField("content", fileContent, Field.Store.YES);
        //Field fieldSize = new TextField("size", fileSize + "", Field.Store.YES);
        Field fieldSizeValue = new LongPoint("size", fileSize);
        Field fieldSizeStore = new StoredField("size", fileSize);
        //创建文档对象
        Document document = new Document();
        //向文档对象中添加域
        document.add(fieldName);
        document.add(fieldPath);
        document.add(fieldContent);
        //document.add(fieldSize);
        document.add(fieldSizeValue);
        document.add(fieldSizeStore);
        //5、把文档对象写入索引库
        indexWriter.addDocument(document);
    }
    //6、关闭indexwriter对象
    indexWriter.close();
}

中文分析器

Lucene自带中文分词器:

  • StandardAnalyzer:单字分词:就是按照中文一个字一个字地进行分词。如:“我爱中国”,果:“我”、“爱”、“中”、“国”。
  • SmartChineseAnalyzer:对中文支持较好,但扩展性差,扩展词库,禁用词库和同义词库等不好处理

IKAnalyzer:

使用方法:

第一步:把jar包添加到工程中

第二步:把配置文件和扩展词典和停用词词典添加到classpath

::: tip 注意

hotword.dicext_stopword.dic文件的格式为UTF-8,注意是无BOMUTF-8编码。

也就是说禁止使用windows记事本编辑扩展词典文件

:::

修改之前的代码使用IK分析器:

//索引库存放路径
Directory directory = FSDirectory.open(new File("D:\\temp\\index").toPath());
IndexWriterConfig config = new IndexWriterConfig(new IKAnalyzer());
//创建一个indexwriter对象
IndexWriter indexWriter = new IndexWriter(directory, config//...
02-01 11:00