方法类

package com.wxf.Test;
import com.wxf.pojo.Goods;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.StringField;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.*;
import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.*;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import java.io.IOException;
import java.nio.file.Paths; /**
* @Auther: wxf
* @Date: 2018/6/29 15:40
*/
public class IndexCRUD {
private Directory dir;
{
try {
dir = FSDirectory.open(Paths.get( System.getProperty("user.dir")+"\\src\\main\\resources\\index"));
} catch (IOException e) {
e.printStackTrace();
}
} /**
* 获取IndexWriter实例
* @return
* @throws Exception
*/
public IndexWriter getWriter()throws Exception{
//中文分词器
StandardAnalyzer standardAnalyzer = new StandardAnalyzer();
IndexWriterConfig iwc=new IndexWriterConfig(standardAnalyzer);
IndexWriter writer=new IndexWriter(dir, iwc);
return writer;
} public void setUp() throws Exception {
Goods goods=new Goods("123","红色强化门",360);
Goods goods2=new Goods("223","黑色强化门",370);
Goods goods3=new Goods("333","白色强化门",380);
String skuid[]={"123","223","333"};
String name[]={"红色强化门","黑色强化门","白色强化门"};
Object obj[]={goods,goods2,goods3};
IndexWriter writer=getWriter();
for(int i=0;i<skuid.length;i++){
Document doc=new Document();
doc.add(new StringField("skuid", skuid[i], Field.Store.YES));
doc.add(new TextField("name",name[i],Field.Store.YES));
doc.add(new TextField("obj", obj[i].toString(), Field.Store.YES));
writer.addDocument(doc); // 添加文档
}
writer.close();
} /**
* 测试写了几个文档
* @throws Exception
*/
public void testIndexWriter()throws Exception{
IndexWriter writer=getWriter();
System.out.println("写入了"+writer.numDocs()+"个文档");
writer.close();
} /**
* 测试读取文档
* @throws Exception
*/
public void testIndexReader()throws Exception{
IndexReader reader=DirectoryReader.open(dir);
System.out.println("最大文档数:"+reader.maxDoc());
System.out.println("实际文档数:"+reader.numDocs());
reader.close();
} /**
* 查询
* @return
*/
public void select(String str1,String str2) throws IOException, ParseException {
//得到读取索引文件的路径
Directory dir = FSDirectory.open(Paths.get(System.getProperty("user.dir")+"\\src\\main\\resources\\index"));
IndexReader ireader = DirectoryReader.open(dir);
IndexSearcher searcher = new IndexSearcher(ireader);
StandardAnalyzer standardAnalyzer = new StandardAnalyzer();
/**
* 第一个参数是要查询的字段;
* 第二个参数是分析器Analyzer
* */
QueryParser parser = new QueryParser(str1, standardAnalyzer);
//根据传进来的str2查找
Query query = parser.parse(str2);
//计算索引开始时间
long start = System.currentTimeMillis();
/**
* 第一个参数是通过传过来的参数来查找得到的query;
* 第二个参数是要出查询的行数
* */
TopDocs rs = searcher.search(query, 10);
long end = System.currentTimeMillis();
System.out.println("匹配"+str2+",总共花费了"+(end-start)+"毫秒,共查到"+rs.totalHits+"条记录。");
for (int i = 0; i < rs.scoreDocs.length; i++) {
Document doc = searcher.doc(rs.scoreDocs[i].doc);
System.out.println("skuid:" + doc.getField("skuid").stringValue());
System.out.println("name:" + doc.getField("name").stringValue());
System.out.println("obj:" + doc.getField("obj").stringValue());
}
}
}

测试类

package com.wxf.Test;
/**
* @Auther: wxf
* @Date: 2018/6/29 15:46
*/
public class Test {
public static void main(String[] args) throws Exception {
IndexCRUD indexCRUD=new IndexCRUD();
// indexCRUD.setUp();
indexCRUD.testIndexWriter();
indexCRUD.testIndexReader();
indexCRUD.select("name", "黑");
}
}

  

indexCRUD.setUp() 这个方法 调一次就可以了 
结果如下

这次换个范围大的查询参数

public class Test {
public static void main(String[] args) throws Exception {
IndexCRUD indexCRUD=new IndexCRUD();
// indexCRUD.setUp();
indexCRUD.testIndexWriter();
indexCRUD.testIndexReader();
indexCRUD.select("name", "强化");
}
}

  结果如下:

这里采用一元分词 可以随意匹配 

lucene简单搜索demo的更多相关文章

  1. lucene简单使用demo

    测试结构目录: 1.索引库.分词器 Configuration.java package com.test.www.web.lucene; import java.io.File; import or ...

  2. lucene 简单搜索步骤

    1.创建IndexReader实例: Directory dir = FSDirectory.open(new File(indexDir)); IndexReader reader = Direct ...

  3. [MyBean说明书]-如何进行最简单的DEMO

    MyBean是轻量级的.绿色的框架,不需要安装任何的组件和携带任何的其他文件,前 期步骤已经相当精简了,仔细阅读完下面简单的五个步骤,就可以编写基于MyBean的插件: 1.加入Delphi的搜索路径 ...

  4. ElasticSearch 5学习(4)——简单搜索笔记

    空搜索: GET /_search hits: total 总数 hits 前10条数据 hits 数组中的每个结果都包含_index._type和文档的_id字段,被加入到_source字段中这意味 ...

  5. C#可扩展编程之MEF学习笔记(一):MEF简介及简单的Demo

    在文章开始之前,首先简单介绍一下什么是MEF,MEF,全称Managed Extensibility Framework(托管可扩展框架).单从名字我们不难发现:MEF是专门致力于解决扩展性问题的框架 ...

  6. nyoj 284 坦克大战 简单搜索

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=284 题意:在一个给定图中,铁墙,河流不可走,砖墙走的话,多花费时间1,问从起点到终点至少 ...

  7. Maven+Spring+Hibernate+Shiro+Mysql简单的demo框架(二)

    然后是项目下的文件:完整的项目请看  上一篇 Maven+Spring+Hibernate+Shiro+Mysql简单的demo框架(一) 项目下的springmvc-servlet.xml配置文件: ...

  8. MEF简介及简单的Demo

    MEF简介及简单的Demo 文章开始之前,首先简单介绍一下什么是MEF,MEF,全称Managed Extensibility Framework(托管可扩展框架).单从名字我们不难发现:MEF是专门 ...

  9. 分布式搜索ElasticSearch构建集群与简单搜索实例应用

    分布式搜索ElasticSearch构建集群与简单搜索实例应用 关于ElasticSearch不介绍了,直接说应用. 分布式ElasticSearch集群构建的方法. 1.通过在程序中创建一个嵌入es ...

随机推荐

  1. FastFDS基础

    1. FastDFS介绍 FastDFS( Fast Distributed file system)是一款轻量级的.高性能的.阿里巴巴开源的分布式文件系统.该系统的作者是余庆 (happyfish1 ...

  2. iOS高德地图SDK定位和搜索附近信息的具体使用

    1.显示地图.定位.显示当前位置. 导入你需要的功能的头文件,申明全局变量,代理方法等等.   初始化地图,在控制器即将显示额时候打开定位和跟踪用户,这里对参数不懂的话康忙进去都有注释.   对了.i ...

  3. 动态iframe 分享

    function createIframe() { var i = document.createElement("iframe"); i.src = "/RSK/Rsk ...

  4. my simplest kv db

    最简单的kv db 最基本的网络连接 使用STL map存储key value 作为多线程互斥的简单例子. 以后有机会逐步优化添加功能 1增加ASIO 异步通讯 2优化存储空间 传递指针 避免过多的拷 ...

  5. 目录命令(cd)

    cd 命令: // 描述: (Change Directory) 更改当前目录或显示当前目录的名称. 如果仅使用驱动器号(例如,cd C :),则cd将显示指定驱动器中当前目录的名称. 如果不带参数使 ...

  6. Event对象和触发

    1.构造: //非IE浏览器事件构造方法 var event = document.createEvent('HTMLEvents');//'HTMLEvents'自定义事件名 //IE浏览器构造方法 ...

  7. abaqus查询网格相关

    怎样查询网格中总共有多少单元和节点: 可以进入mesh模块----tools----query----mesh----下面选择select elements----选中所有单元----鼠标中键就可以显 ...

  8. Java面试题4

    一.JAVA基础篇-概念1.简述你所知道的Linux: Linux起源于1991年,1995年流行起来的免费操作系统,目前, Linux是主流的服务器操作系统, 广泛应用于互联网.云计算.智能手机(A ...

  9. 20155326刘美岑 《网络对抗》Exp2 后门原理与实践

    20155326刘美岑 <网络对抗>Exp2 后门原理与实践 实验内容 (1)使用netcat获取主机操作Shell,cron启动 (2)使用socat获取主机操作Shell, 任务计划启 ...

  10. mysql大全

    1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- 创建 备份 ...