热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java之学习记录92lecene全文检索

搭建springBoot项目依赖:<?xmlversion=1.0

搭建springBoot项目

依赖:


xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0

org.springframework.boot
spring-boot-starter-parent
2.3.4.RELEASE


com.lagou
lucene
0.0.1-SNAPSHOT
lucene
Demo project for Spring Boot

11



org.springframework.boot
spring-boot-starter-web


org.springframework.boot
spring-boot-devtools
runtime
true


org.projectlombok
lombok
true


org.springframework.boot
spring-boot-starter-test
test



com.baomidou
mybatis-plus-boot-starter
3.3.2



javax.persistence
javax.persistence-api
2.2



mysql
mysql-connector-java
runtime



org.apache.lucene
lucene-core
4.10.3


org.apache.lucene
lucene-analyzers-common
4.10.3



com.janeluo
ikanalyzer
2012_u6





org.apache.maven.pluginsmaven-compiler-plugin 11 11 utf-8


org.springframework.bootspring-boot-maven-plugin repackage





创建引导类
?

package com.lagou.lucene;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.lagou.lucene.mapper")
public class LuceneApplication {
public static void main(String[] args) {
SpringApplication.run(LuceneApplication.class, args);
}
}

配置properties文件
?

server:
port: 9000
Spring:
application:
name: lagou-lucene
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/es?useUnicode=true&characterEncoding=utf8&serverTimezOne=UTC
username: root
password: 123456
mybatis:
configuration:
map-underscore-to-camel-case: true

创建实体类、mapper、service
?
实体类:

package com.lagou.lucene.pojo;
import lombok.Data;
import javax.persistence.Id;
import javax.persistence.Table;
@Data
@Table(name = "job_info")
public class JobInfo {
@Id
private long id;
private String companyName;
private String companyAddr;
private String companyInfo;
private String jobName;
private String jobAddr;
private String jobInfo;
private int salaryMin;
private int salaryMax;
private String url;
private String time;
}

mapper

package com.lagou.lucene.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.lagou.lucene.pojo.JobInfo;
public interface JobInfoMapper extends BaseMapper {
}

service及serviceImpl

package com.lagou.lucene.service;
import com.lagou.lucene.pojo.JobInfo;
import java.util.List;
public interface JobInfoService {
/**
* 根据id查询
* @param id
* @return
*/
public JobInfo selectById(long id);
/**
* 查询所有
* @return
*/
public List selectAll();
}

package com.lagou.lucene.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.lagou.lucene.mapper.JobInfoMapper;
import com.lagou.lucene.pojo.JobInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class JobInfoServiceImpl implements JobInfoService {
@Autowired
private JobInfoMapper jobInfoMapper;
@Override
public JobInfo selectById(long id) {
return jobInfoMapper.selectById(id);
}
@Override
public List selectAll() {
QueryWrapper wrapper = new QueryWrapper<>();
List jobInfoList = jobInfoMapper.selectList(wrapper);
return jobInfoList;
}
}

整体结构:
?
java之学习记录 9 - 2 - lecene 全文检索 - 文章图片

在test下创建一个包测试

package com.lagou.lucene;
import com.lagou.lucene.pojo.JobInfo;
import com.lagou.lucene.service.JobInfoService;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.*;
import org.apache.lucene.index.*;
import org.apache.lucene.search.*;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.wltea.analyzer.lucene.IKAnalyzer;
import java.io.File;
import java.util.List;
@RunWith(SpringRunner.class)
@SpringBootTest
public class LuceneApplicationTests {
@Autowired
private JobInfoService jobInfoService;
/**
* 创建索引
*/
@Test
public void test() throws Exception {
// 指定索引文件的存储位置,索引具体的表现形式就是一组有规则的文件
Directory directory = FSDirectory.open(new File("E:/class/index"));
// 配置版本及其分词器 StandardAnalyzer()
Analyzer analyzer = new IKAnalyzer();
IndexWriterConfig cOnfig= new IndexWriterConfig(Version.LATEST,analyzer);
// 创建indexWriter对象,作用就是创建索引
IndexWriter indexWriter = new IndexWriter(directory,config);
// 先删除已经存在的索引库
indexWriter.deleteAll();
// 获得索引源/原始数据
List jobInfoList = jobInfoService.selectAll();
// 遍历JobInfoList,每次遍历创建一个Document对象
for (JobInfo jobInfo : jobInfoList) {
// 创建Document对象
Document document = new Document();
// 创建Field对象,添加到document中
document.add(new LongField("id",jobInfo.getId(), Field.Store.YES));
// 切分词,索引,存储
document.add(new TextField("companyName",jobInfo.getCompanyName(), Field.Store.YES));
document.add(new TextField("companyAddr",jobInfo.getCompanyAddr(), Field.Store.YES));
document.add(new TextField("companyInfo",jobInfo.getCompanyInfo(), Field.Store.YES));
document.add(new TextField("jobName",jobInfo.getJobName(), Field.Store.YES));
document.add(new TextField("jobAddr",jobInfo.getJobAddr(), Field.Store.YES));
document.add(new TextField("jobInfo",jobInfo.getJobInfo(), Field.Store.YES));
document.add(new IntField("salaryMin",jobInfo.getSalaryMin(),Field.Store.YES));
document.add(new IntField("salaryMax",jobInfo.getSalaryMax(),Field.Store.YES));
document.add(new StringField("url",jobInfo.getUrl(),Field.Store.YES));
// 将文档追加到索引库
indexWriter.addDocument(document);
}
// 关闭资源
indexWriter.close();
System.out.println("create index success");
}
/**
* 查询索引
*/
@Test
public void query() throws Exception{
// 指定索引文件的存储位置,索引具体的表现形式就是一组有规则的文件
Directory directory = FSDirectory.open(new File("E:/class/index"));
// IndexReader对象
IndexReader indexReader = DirectoryReader.open(directory);
// 创建查询对象,IndexSearcher
IndexSearcher indexSearcher = new IndexSearcher(indexReader);
// 使用term,查询公司名称中包含“北京”的所有文档对象
Query query = new TermQuery(new Term("companyName","北京"));
TopDocs search = indexSearcher.search(query, 100);
// 获得符合查询条件的文档数
int totalHits = search.totalHits;
System.out.println("符合条件的文档数:"+totalHits);
// 获得命中的文档
ScoreDoc[] scoreDocs = search.scoreDocs;
for (ScoreDoc scoreDoc : scoreDocs) {
// 文档id
int id = scoreDoc.doc;
// 通过文档id获得文档对象
Document doc = indexSearcher.doc(id);
System.out.println("id:"+doc.get("id"));
System.out.println("companyName:"+doc.get("companyName"));
System.out.println("companyAddr:"+doc.get("companyAddr"));
System.out.println("companyInfo:"+doc.get("companyInfo"));
System.out.println("jobName:"+doc.get("jobName"));
System.out.println("jobAddr:"+doc.get("jobAddr"));
System.out.println("jobInfo:"+doc.get("jobInfo"));
System.out.println("salaryMin:"+doc.get("salaryMin"));
System.out.println("salaryMax:"+doc.get("salaryMax"));
System.out.println("----------------------------------------------");
}
// 释放资源
indexReader.close();
}
}

???????



推荐阅读
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • Android日历提醒软件开源项目分享及使用教程
    本文介绍了一款名为Android日历提醒软件的开源项目,作者分享了该项目的代码和使用教程,并提供了GitHub项目地址。文章详细介绍了该软件的主界面风格、日程信息的分类查看功能,以及添加日程提醒和查看详情的界面。同时,作者还提醒了读者在使用过程中可能遇到的Android6.0权限问题,并提供了解决方法。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 本文介绍了一些Java开发项目管理工具及其配置教程,包括团队协同工具worktil,版本管理工具GitLab,自动化构建工具Jenkins,项目管理工具Maven和Maven私服Nexus,以及Mybatis的安装和代码自动生成工具。提供了相关链接供读者参考。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了StartingzookeeperFAILEDTOSTART相关的知识,希望对你有一定的参考价值。下载路径:https://ar ... [详细]
  • Activiti7流程定义开发笔记
    本文介绍了Activiti7流程定义的开发笔记,包括流程定义的概念、使用activiti-explorer和activiti-eclipse-designer进行建模的方式,以及生成流程图的方法。还介绍了流程定义部署的概念和步骤,包括将bpmn和png文件添加部署到activiti数据库中的方法,以及使用ZIP包进行部署的方式。同时还提到了activiti.cfg.xml文件的作用。 ... [详细]
  • 解决IDEA配置xml文件头报错的方法
    本文介绍了解决IDEA配置xml文件头报错的方法,包括了具体的解决方案和步骤。通过本文的指导,读者可以轻松解决这个问题并正常使用IDEA进行开发工作。 ... [详细]
  • 大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记
    本文介绍了大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记,包括outputFormat接口实现类、自定义outputFormat步骤和案例。案例中将包含nty的日志输出到nty.log文件,其他日志输出到other.log文件。同时提供了一些相关网址供参考。 ... [详细]
  • Java如何导入和导出Excel文件的方法和步骤详解
    本文详细介绍了在SpringBoot中使用Java导入和导出Excel文件的方法和步骤,包括添加操作Excel的依赖、自定义注解等。文章还提供了示例代码,并将代码上传至GitHub供访问。 ... [详细]
  • Sleuth+zipkin链路追踪SpringCloud微服务的解决方案
    在庞大的微服务群中,随着业务扩展,微服务个数增多,系统调用链路复杂化。Sleuth+zipkin是解决SpringCloud微服务定位和追踪的方案。通过TraceId将不同服务调用的日志串联起来,实现请求链路跟踪。通过Feign调用和Request传递TraceId,将整个调用链路的服务日志归组合并,提供定位和追踪的功能。 ... [详细]
  • 云原生应用最佳开发实践之十二原则(12factor)
    目录简介一、基准代码二、依赖三、配置四、后端配置五、构建、发布、运行六、进程七、端口绑定八、并发九、易处理十、开发与线上环境等价十一、日志十二、进程管理当 ... [详细]
author-avatar
东东84321
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有