美文网首页
Lucene 构造索引 & 查询 Demo

Lucene 构造索引 & 查询 Demo

作者: caster | 来源:发表于2021-07-13 09:51 被阅读0次

maven引入lucene-core,lucene-analyzers-common,lucene-queryparser。
将文档写入索引库方式如下:

Doc d1=new Doc("1","中华人民共和国");
Doc d2=new Doc("2","我爱北京天安门");

//构造lucene文档
Document doc1 = new Document();
doc1.add(new TextField("id",d1.getId(), Field.Store.YES));
doc1.add(new TextField("text",d1.getText(), Field.Store.YES));
Document doc2 = new Document();
doc2.add(new TextField("id",d2.getId(), Field.Store.YES));
doc2.add(new TextField("text",d2.getText(), Field.Store.YES));
//构造分词器和索引库目录的writer
Directory dir= FSDirectory.open(Paths.get("/Users/caster/IdeaProjects/lucene/lucene"));
IndexWriterConfig config=new IndexWriterConfig(new StandardAnalyzer());
IndexWriter indexWriter=new IndexWriter(dir,config);
//写入文档
indexWriter.addDocument(doc1);
indexWriter.addDocument(doc2);

indexWriter.close();

写入后lucene索引库文件夹内容如下:

lucene索引库文件
通过luke工具解析lucene索引库文件:
lucene文件内容
luke查询
查询代码:
//查询分词器要和创建索引的分词器一致,会对查询内容进行分词后每个词进行查询
Directory dir= FSDirectory.open(Paths.get("/Users/caster/IdeaProjects/lucene/lucene"));
DirectoryReader ireader = DirectoryReader.open(dir);
IndexSearcher isearcher = new IndexSearcher(ireader);

PhraseQuery.Builder builder = new PhraseQuery.Builder();
builder.add(new Term("text","北"));
PhraseQuery query = builder.build();

ScoreDoc[] hits = isearcher.search(query, 10).scoreDocs;
for (int i = 0; i < hits.length; i++) {
    //通过查询返回的文档ID获取到对应的文档信息
    Document hitDoc = isearcher.doc(hits[i].doc);
    System.out.println(hitDoc.get("text"));//我爱北京天安门
    System.out.println(hitDoc.get("id"));//2
}

update by query:

Doc d1=new Doc("1","中华人民共和国万岁");

Document doc1 = new Document();
doc1.add(new StringField("id",d1.getId(), Field.Store.YES));
doc1.add(new TextField("text",d1.getText(), Field.Store.YES));

Directory dir= FSDirectory.open(Paths.get("/Users/caster/IdeaProjects/lucene/lucene"));
IndexWriterConfig config=new IndexWriterConfig(new StandardAnalyzer());
IndexWriter indexWriter=new IndexWriter(dir,config);
//将id字段为1的文档修改为doc1
indexWriter.updateDocument(new Term("id","1"),doc1);
indexWriter.close();

delete by query:

Directory dir= FSDirectory.open(Paths.get("/Users/caster/IdeaProjects/lucene/lucene"));
IndexWriterConfig config=new IndexWriterConfig(new StandardAnalyzer());
IndexWriter indexWriter=new IndexWriter(dir,config);
//将id字段为1的文档删除
indexWriter.deleteDocuments(new Term("id","1"));
indexWriter.close();

相关文章

  • Lucene 构造索引 & 查询 Demo

    maven引入lucene-core,lucene-analyzers-common,lucene-querypa...

  • Lucene 7.4 初体验

    前言 本文的简要内容: Lucene简介 体验Lucene Demo Lucene 核心类介绍 Lucene 索引...

  • 关于SQL优化的小知识

    负向查询不命中索引 不命中 命中 前置模糊查询不命中索引 不命中 命中 建议可以考虑使用 Lucene 等全文索引...

  • Elasticsearch的准实时(near real-time

    elasticsearch是基于lucene的,lucene是可以做到实时的,就是创建索引之后,立即能查询到。但是...

  • Lucene介绍、分词详解

    Lucene介绍 1、Lucene简介 最受欢迎的java开源全文搜索引擎开发工具包。提供了完整的查询引擎和索引引...

  • lucene实例与源码解析

    lucene是什么? 全文检索的引擎工具包,实现了全文检索的类库。全文检索,将查询的目标对象提取出来构造一套索引,...

  • Lucene简介

    传统数据库mysql在大数据量和高并发情况下,在模糊查询中文关键词时效率不高。使用lucene构造搜索索引库用于响...

  • [转]Lucene的索引文件格式

    原文链接Lucene学习总结之三:Lucene的索引文件格式(1)、Lucene的索引文件格式(2)、Lucene...

  • Lucene的索引文件格式(基于V7_3_0)

    拜读刘超觉先的Lucene学习笔记Lucene学习总结之三:Lucene的索引文件格式(1)、Lucene的索引文...

  • [转]Lucene索引过程分析

    原文链接# Lucene学习总结之四:Lucene索引过程分析(1)、# Lucene索引过程分析(2)、#Lu...

网友评论

      本文标题:Lucene 构造索引 & 查询 Demo

      本文链接:https://www.haomeiwen.com/subject/jqnsultx.html