首页 > lucene 学习一

lucene 学习一

 

索引工具的三部分

  1.索引部分

  2.分词部分

  3.搜索部分

 

查看索引的工具:luke   java -jar fileName.jar

 

目标:为文件夹的所有的文档生成索引并搜索它

package com.lucene;import java.io.File;
import java.io.FileReader;
import java.io.IOException;import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.store.LockObtainFailedException;
import org.apache.lucene.util.Version;// lucene 使用的版本为 3.5
public class HelloLucene {public static void main(String[] args) {HelloLucene hl = new HelloLucene();hl.index();hl.search();}/*** 建立文档索引*/public void index() {IndexWriter writer = null;try {//1.创建Director(确定索引建立的位置)
//            Directory directory = new RAMDirectory(); //在内存中建立Directory directory = FSDirectory.open(new File("d:/index_01"));//2.通过 IndexWriter 写索引IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_35, new StandardAnalyzer(Version.LUCENE_35));writer = new IndexWriter(directory, iwc);//3.创建 Document 对象Document doc = null;File f = new File("G:/lucene/");for(File file : f.listFiles()){//4.为文档 添加Field (文档的每个属性比如名称可以称之为文档的一个Field)doc = new  Document();doc.add(new Field("content", new FileReader(file)));doc.add(new Field("filename", file.getName(), Field.Store.YES, Field.Index.ANALYZED_NO_NORMS));doc.add(new Field("path", file.getAbsolutePath(), Field.Store.YES, Field.Index.ANALYZED_NO_NORMS));//5.通过IndexWrite添加文档到索引中
                writer.addDocument(doc);// 在索引库没有建立并且没有索引文件的时候首先要commit一下让他建立一个 索引库的版本信息  
                writer.commit();}} catch (CorruptIndexException e) {e.printStackTrace();} catch (LockObtainFailedException e) {e.printStackTrace();} catch (IOException e) {try {if(writer != null) writer.close();} catch (CorruptIndexException e1) {e1.printStackTrace();} catch (IOException e1) {e1.printStackTrace();}e.printStackTrace();}}/*** 搜索*/public void search(){try {//1.创建DirectoryDirectory directory = FSDirectory.open(new File("d:/index_01"));//2.创建IndexReaderIndexReader reader = IndexReader.open(directory);//3.根据IndexReader创建IndexSearcherIndexSearcher searcher = new IndexSearcher(reader);//4.创建搜索的的QueryQueryParser parser = new QueryParser(Version.LUCENE_35, "content", new StandardAnalyzer(Version.LUCENE_35));//要搜索的内容Query query = parser.parse("document");//5.根据searcher搜索并返回TopDocsTopDocs tds = searcher.search(query, 100);//6.根据TopDocs获取scoreDocs对象ScoreDoc[] sds = tds.scoreDocs;for(ScoreDoc sd:sds){//7.根据Search和ScoreDoc对象获取具体的Document对象Document  d = searcher.doc(sd.doc);//8.根据document对象获取需要的值                System.out.println(d.get("filename")+"|"+d.get("path"));}System.out.println(sds.length);    } catch (IOException e) {// TODO Auto-generated catch block
            e.printStackTrace();} catch (ParseException e) {// TODO Auto-generated catch block
            e.printStackTrace();}//2.
    }}

 

更多相关:

  • 有一天,我写了一个自信满满的自定义组件myComponent,在多个页面import使用了,结果控制台给我来这个 我特么裤子都脱了,你给我来这个提示是几个意思 仔细一看 The Component 'MyComponentComponent' is declared by more than one NgModule...

  • 创建一个带路由的项目,依次执行下面每行代码 ng n RouingApp --routingcd RouingAppng g c components/firstng g c components/secondng g m components/second --routing    代码拷贝: import {NgModul...

  •       cnpm install vue-quill-editor cnpm install quill-image-drop-module cnpm install quill-image-resize-module 执行上面的命令安装,然后在main.js下面加入 //引入quill-editor编辑器import...

  • 首先要理解Vue项目加载顺序: index.html → main.js → App.vue → nav.json→ routes.js → page1.vue index.html建议加入样式

  • 简单记录平时画图用到的python 便捷小脚本 1. 从单个文件输入 绘制坐标系图 #!/usr/bin/python # coding: utf-8 import matplotlib.pyplot as plt import numpy as np import matplotlib as mpl import sysf...

  • 菜鸟一枚,正在学习C++ Gui Qt4,整理很零碎,欢迎批评指正   1.窗口标题: QWidget *window = new QWidget; window->setWindowTitle("Enter Your Age"); **************************************** 关于标题...

  • 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 总体思路是: 比较两个链表头节点,较小的插入新链表指针之后,同时较小链表指针向后移动一位 实现如下: ListNode* mergeTwo...

  • 1.直接调用微软socket对象处理 static void Main(string[] args){try{IPAddress ip = new IPAddress(new byte[] { 127, 0, 0, 1 });//在3721端口新建一个TcpListener对象TcpListener listener = new...

  •   现在很多地方都会用到zookeeper, 用到它的地方就是为了实现分布式。用到的场景就是服务注册,比如一个集群服务器,需要知道哪些服务器在线,哪些服务器不在线。   ZK有一个功能,就是创建临时节点,当机器启动应用的时候就会连接到一个ZK节点,然后创建一个临时节点,那么通过获取监听该路径,并且获取该路径下的节点数量就知道有哪些服务...

  • 前台到后台java时data日期类型的转化 在实体类中用@DataTimeFormat,这样设置即使传过来是空的字符串也是可以转的,要和前面传过来的格式一致,如 @XmlElement(name="BeginDate") @DateTimeFormat(pattern="yyyy-MM-dd") private Date begin...

  • 一、视图(Views)与 同义词   1、视图:实际上是对查询结果集的封装,视图本身不存储任何数据,所有的数据都存放在原来的表中;      在逻辑上可以把视图看作是一张表   2、作用: 封装查询语句,简化复杂的查询需求屏蔽表中的细节  3、语法:  create [or replace] view 视图的名称 as 查询语句...

  • explain显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。 虽然这篇文章我写的很长,但看起来真的不会困啊,真的都是干货啊!!!! 先解析一条sql语句,看出现什么内容 EXPLAIN SELECT s.uid,s.username,s.name,f.email,f.mob...

  • 重建索引  如果表中记录频繁地被删除或插入,尽管表中的记录总量保持不变,索引空间的使用量会不断增加。虽然记录从索引中被删除,但是该记录索引项的使用空间不能被重新使用。因此,如果表变化不定,索引空间量会不断增加,不论表中记录数量是否增加,这是因为索引中无效空间会增加。 要回收那些曾被删除记录使用的空间,需要使用Alter index r...

  • 其实SQL能力很差劲,简单查询还成,复杂查询以及优化,基本脑子里没有概念。了解一下概念,然后打算找本理论书好好看看。 先到处找了些优化的sql,整理出来,记录一下。     1、对查询进行优化,应尽量避免全表扫描,首先应考虑在where 及order by 涉及的列上建立索引。     2、应尽量避免在where 子句中对字段进行n...

  • 原文地址:oracle索引的简单总结作者:kindle一、索引的概念:     数据库的索引类似于书籍的索引。在书籍中,索引允许用户不必翻阅完整个书就能迅速地找到所需要的信息。在数据库中,索引也允许数据库程序迅速地找到表中的数据,而不必扫描整个数据库。 二、索引的特点:     1.索引可以加快数据库的检索速度     2.索引降低...