Lucene全文检索_索引创建

  因项目原因接触到了solr,感觉全文检索满神奇的,计算机的搜索文件功能应该都用过,非常慢.lucene建立一个索引库,而索引检索是非常快的.
  假设文件系统,某个目录下有n个文件,每个文件有不同的文件名,文件大小,文件路径,文件内容.现在需要从这些分类中查找一个关键词,假设文件系统是遍历的方式每个文件都去查一下这个关键词,这是很慢的,每个document都有唯一的id,也都有上述的4种属性(field),读取每个document,按需求去分析它的每个文件名,路径,文件内容,将(field:词汇)作为一个Term,假设需要建立索引的目录下有《诗经》《诗经解读》两个文件,两个文档的id分别是1,2,这个field的属性名叫fileName,那么分析后的结果如下:
Term->fileName:文件名 -> document的id
Term->fileName:诗经     -> 1,2
Term->fileName:解析     -> 2
  这样当你检索:fileName:诗经.就可以快速定位到文档1和文档2了.

创建索引步骤

1.创建一个IndexWriter对象
 a).指定索引库的存放位置
 b).指定一个分析器,对文档内容进行分析
2.创建document对象
3.创建field对象,将field对象添加到document对象中,
4.使用IndexWriter对象,将document对象写入索引库,此过程进行索引创建,并将索引和document对象写入索引库
5.关闭IndexWriter对象

Field域的属性:

1.是否分析:是否对域内容进行分词处理,如果我们需要对该域进行索引查询,那么需要进行分析
2:是否索引:将Field分析后的词或整个field值进行索引,只有索引才可以通过索引查询到,比如:文件名,商品名,而价格,身份证号这类不需要分析,但是需要索引
3.是否存储:进行Field值存储到文档中,存储到到文档中的field才可以从document中获取,比如:商品名称,订单号,

public class FirstLucene {


    @Test
    public void testIndex() {
        try {
            //保存索引的位置
            File indexRepository = new File("D:\\project\\temp\\index");
            Path path = indexRepository.toPath();
            Directory directory = FSDirectory.open(path);
            //标准分词器
            Analyzer analyzer = new StandardAnalyzer();
            IndexWriterConfig config = new IndexWriterConfig(analyzer);
            IndexWriter writer = new IndexWriter(directory,config);
            //需要分析的文件目录 ,注意目录下不能用文件夹
            File files = new File("D:\\project\\python\\demo\\pydemo");
            File[] listFiles = files.listFiles();
            for(File file : listFiles){
                Document document = new Document();
                //文件名称
                String fileName = file.getName();
                Field fileNameField = new TextField("fileName",fileName, Field.Store.YES);
                //文件大小
                long size = FileUtils.sizeOf(file);
                Field sizeField = new DoubleDocValuesField("size",size);
                //文件路径
                String filePath = file.getPath();
                Field pathField = new StoredField("path",filePath);
                //文件内容
                String file_content = FileUtils.readFileToString(file, "gb2312");
                Field fileContentFiled = new TextField("fileContent",file_content, Field.Store.YES);

                document.add(fileNameField);
                document.add(sizeField);
                document.add(pathField);
                document.add(fileContentFiled);
                writer.addDocument(document);
            }
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
        }

    }
}

以上就是索引创建过程,初次接触,请各位大佬指教
ps:1024节快乐,永远不秃,没有bug,都有女朋友.

猜你喜欢

转载自blog.csdn.net/labviewxx/article/details/83350279
今日推荐