package com;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import org.wltea.analyzer.lucene.IKAnalyzer;
import org.wltea.analyzer.lucene.IKQueryParser;
import org.wltea.analyzer.lucene.IKSimilarity;
public class Search {
public static void main(String[] args) throws Exception {
String fieldName = "discript";
String keyword = "人民";
/*Query IkQuery = searchIKQuery(fieldName, keyword);
executeQuery(fieldName, keyword,IkQuery);*/
BooleanQuery booleanQuery = searchBooleanQuery(keyword);
executeQuery(fieldName, booleanQuery);
}
public static BooleanQuery searchBooleanQuery( String keyword) throws Exception {
BooleanQuery bq = new BooleanQuery();
Analyzer analyzer = new IKAnalyzer();
String[] fn = {"name"};
// 增加权重
Map<String, Float> filedmap = new HashMap();
filedmap.put("name", 50f);
MultiFieldQueryParser multField = new MultiFieldQueryParser(Version.LUCENE_30, fn, analyzer, filedmap);
Query muquery = multField.parse(keyword);
Query ikquery = IKQueryParser.parseMultiField(fn,keyword);
Term term1 = new Term("discript",keyword);
TermQuery tq = new TermQuery(term1);
bq.add(tq,BooleanClause.Occur.MUST);
bq.add(muquery, BooleanClause.Occur.SHOULD);
//bq.add(ikquery, BooleanClause.Occur.MUST);
System.out.println(bq);
return bq;
}
public static Query searchIKQuery(String fieldName, String keyword) throws IOException{
// 使用IKQueryParser查询分析器构造Query对象
Query query = IKQueryParser.parse(fieldName, keyword);
return query;
}
public static IndexSearcher createSeacher() throws Exception {
IndexSearcher isearcher = null;
Directory directory = null;
File file = new File("C:/commFile/lucence");
directory = FSDirectory.open(file);
// 实例化搜索器
isearcher = new IndexSearcher(directory);
// 在索引器中使用IKSimilarity相似度评估器
isearcher.setSimilarity(new IKSimilarity());
if (directory != null) {
directory.close();
}
return isearcher;
}
public static void executeQuery(String fieldName,Query query)throws Exception {
// 实例化IKAnalyzer分词器
Analyzer analyzer = new IKAnalyzer();
IndexSearcher isearcher = createSeacher();
try {
Sort sort = new Sort();
// 按字段的排序(一个或多个)
SortField[] f = { new SortField("name", SortField.STRING, false) };
sort.setSort(f);
// 搜索相似度最高的10条记录
//TopDocs topDocs = isearcher.search(query, null, 10, sort);
TopDocs topDocs = isearcher.search(query, 10);
// 关键字高亮显示
Formatter formatter = new SimpleHTMLFormatter("<font color=\"red\">", "</font>"); // 前缀和后缀
Scorer scorer = new QueryScorer(query);
Highlighter highlighter = new Highlighter(formatter, scorer);
highlighter.setTextFragmenter(new SimpleFragmenter(200)); // 字长度
System.out.println("命中文章的篇数:" + topDocs.totalHits);
// 输出结果
ScoreDoc[] scoreDocs = topDocs.scoreDocs;
for (int i = 0; i < topDocs.totalHits; i++) {
int docId =scoreDocs[i].doc;
Document targetDoc = isearcher.doc(docId);
System.out.println("内容:" + targetDoc.get(fieldName)+"===="+targetDoc.get("name"));//输出相应字段的内容
String hupName = highlighter.getBestFragment(analyzer,fieldName,targetDoc.get(fieldName));
//System.out.println(hupName);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (analyzer != null) {
analyzer.close();
}
if (isearcher != null) {
isearcher.close();
}
}
}
}
相关推荐
光伏逆变器在环测试解决方案
光伏行业是利用太阳能光辐射将其转化为可用电能的行业。近年来,为应对气候变化和能源安全等挑战,全球对清洁能源的需求不断增长。太阳能作为最具潜力和可再生的能源之一,被视为替代传统化石能源的重要选择,光伏行业因此得到了迅猛发展,并在全球范围内得到了广泛应用。许多国家和地区都将光伏技术作为关键的能源发展方向。尤其是在新兴和发展中国家,光伏发电具有巨大的增长潜力,将成为未来市场竞争的重点。随着规模化生产的推进,光伏组件的制造成本不断降低。
Lucene索引并检索数据库
比较深入的讲解了Lucene索引和检索原理,以及如何对数据库建立索引和检索数据
智能座舱-语音交互系统
从什么是智能座舱、智能座舱的发展驱动因素、智能座舱的构成要素三个方面梳理我对智能座舱的基础认识之后,为了加深“智能座舱产品入门”课程中语音交互部分知识的理解,我从什么是语音交互、语音交互的底层技术、智能座舱的语音交互等方面,对智能座舱语音交互系统相关的知识进行了梳理与总结。
Lucene索引的高级检索(4)
我们打开任意的搜索引擎都具备高亮查询功能,搜索引擎会将符合搜索条件的关键字进行高亮展示,凸显查询的重点信息;Lucene也支持对搜索结果集的高亮返回;高亮的本质是将搜索到的关键字进行前后缀包裹,最终返回到前端页面渲染后就成了高亮的效果了;
STM32Cubemx-H7-17-麦克纳姆轮驱动
我们先看.h,知道哪些函数会有哪些功能和宏定义参数首先 是在.h的宏定义处定义引脚编号,比如tb6612控制方向的引脚,以及设定了哪个定时器作为pwm输出,还有编码计次的中断引脚/* 硬件相关宏定义 *//*1 前进方向往上 42 3*/// TB6612 方向引脚定义/* 定时器相关宏定义 *//* 编码器相关宏定义 */把自己的引脚根据原理图填对应,方向引脚也是,如果发现反转就把对应的引脚定义反过来,编码也是,编码我们用一个引脚就好,都在cubemx配置好。
从零到一:华为iMaster NCE-Campus部署中的Euler OS与FusionInsight深度解析
本文深入解析华为iMaster NCE-Campus部署中Euler OS与FusionInsight的关键技术要点,包括RAID配置、网络绑定技术、安装避坑指南及性能调优方案。通过实战经验和详细配置示例,帮助工程师提升部署效率与系统稳定性,确保华为企业级解决方案的高效运行。
基于lucene的案例开发:实时索引的检索
我们之前已经介绍了IndexSearcher中的检索方法,也介绍了如何基于lucene中的NRT*类去创建实时索引,这里我们就重点介绍下基于实时索引的检索方案,实现NRTSearch基类
基于单片机红外线遥控Proteus仿真电路发射接收
*单片机设计介绍,基于单片机红外线遥控Proteus仿真电路发射接收。
信息检索-搜索引擎的搭建(Lucene)
搜索引擎为信息检索课程的实验设计,爬取山东大学新闻网,使用lucene等开源工具搭建小型搜索引擎。要求 : Web网页信息抽取 以山东大学新闻网为起点进行网页的循环爬取,保 持爬虫在 view.sdu.edu.cn之内(既只爬取这个站点的网页),爬取的网页数量越多越好。 索引构建 对上一步爬取到的网页进行结构化预处理,包括基于模板的信
OpenClaw Browser Relay Extension 鉴权失败与 invalid handshake 问题的终极解决方案
在使用 OpenClaw 浏览器插件 (Browser Relay Extension) 时,许多用户可能会遇到两个主要问题:一是配置端口错误导致的连接失败,二是鉴权失败 (Gateway token rejected)。本文将详细解析这两个问题并提供解决方案。
Xilinx FPGA ICAP原语实现多重配置
众所周知,常见的FPGA通常为SRAM结构,固件程序一般存放在外置的串行Flash中,比如SPI Flash,M25P16或N25Q128等。 FPGA启动时,一般先从SPI起始地址开始加载数据到内部的SRAM,加载完成、校验通过则会直接运行。 那么有没有可能在SPI Flash中存放两个或多个FPGA固件呢?
Lucene创建索引和索引的基本检索
Lucene创建索引和索引的基本检索 Author: 百知教育gaozhy 注:演示代码所使用jar包版本为 lucene-xxx-5.2.0.jar lucene索引操作创建索引代码 try { // 1. 指定索引文件存储位置 Directory directory = FSDirectory.open(Paths.get("F:/lucene/index/example
数学建模模型总结
这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!
Lucene创建索引和索引的基本检索(Lucene 之 Hello World)
Author: 百知教育 gaozhy 注:演示代码所使用jar包版本为 lucene-xxx-5.2.0.jar 一、lucene索引操作 1、创建索引代码 try { // 1. 指定索引文件存储位置 Directory directory = FSDirectory.open(Paths.get("F:/lucene/index/example01")); ...
SAP B1中文培訓教材_SDK
公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说
ET2012新版免狗免安装绿色软件
ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,
Lucene——创建索引和检索索引
Lucene——创建索引和检索索引 何为Lucene? Lucene是一个全文检索引擎工具,利用lucene可以快速搭建处属于自己的搜索引擎。并且是一个完全用Java编写的高性能,功能齐全的文本搜索引擎库。它是一种适用于几乎所有需要全文搜索的应用程序的技术,尤其是跨平台搜索。 1.创建索引 public class CreateIndex { @Test public v...
【Lucene】Apache Lucene全文检索引擎架构之构建索引
上一篇博文中已经对全文检索有了一定的了解,这篇文章主要来总结一下全文检索的第一步:构建索引。其实上一篇博文中的示例程序已经对构建索引写了一段程序了,而且那个程序还是挺完善的。不过从知识点的完整性来考虑,我想从Lucene的添加文档、删除文档、修改文档以及文档域加权四个部分来展开对构建索引的总结,也便于我后期的查看。会重点分析一下删除文档(因为有两中方式)和文档域加权这(实际中会用到比较多)两个部分。 1. 准备阶段 新建一个maven工程,pom.xml如下: <project x.
走进lucene - 创建索引、检索
看过王老师的信息检索导论,一直想学lucene,
使用Lucene进行全文检索(一)---处理索引
scud(飞云小侠) http://www.jscud.com 转载请注明来源/作者关键字:lucene,html parser,全文检索,IndexReader,Document,Field,IndexWriter,Term,HTMLPAGE Lucene是一个全文检索的引擎,目前有Java和.Net 等几个版本.Java版本的网址是http://lucene.apache.org.相关的一个项
JAVA基于Lucene实现建立索引以及检索
Step 1 利用Lucene建立索引数据库中存放了数据集,对应上万个TXT的文件,表FILE含有两个字段,分别为path和content,依次保存文件的路径和内容。这里,利用Lucene对这些数据建立索引。 package pretreatment;import java.io.File;import java.io.IOException;import java.sql
Lucene和Solr和Elasticsearch区别,全文检索引擎工具包Lucene索引流程和搜索流程实操
LuceneLucene是apache下的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎。Lucene是一个工具包,它不能独立运行,不能单独对外提供服务。搜索引擎可以独立运行对外提供搜索服务。SolrSolr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器。
lucene入门-索引目录下的所有网页以及索引检索
package bindex;import java.io.File;import tool.FileText;import tool.FileList;import java.io.*;import org.apache.lucene.document.Document;import org.apache.lucene.document.Field;import org.apache.l
Lucene使用(一)简单索引的创建和检索
1.Lucene的下载 Lucene的官网地址是http://lucene.apache.org/,访问该地址,可看到Lucene的最新更新日志如下: 点击上述红框中的链接,下载Lucene5.5.5的压缩包文件lucene-5.5.5.zip。 2.创建简单的索引 新建Java项目,并创建Lucene的测试类LuceneTest: package com.xxpsw.demo.lu
基于Java的全文索引/检索引擎——Lucene
基于Java的全文索引/检索引擎——LuceneLucene不是一个完整的全文索引应用,而是是一个用Java写的全文索引引擎工具包,它可以方便的嵌入到各种应用中实现针对应用的全文索引/检索功能。Lucene的作者:Lucene的贡献者Doug Cutting是一位资深全文索引/检索专家,曾经是V-Twin搜索引擎(Apple的Copland操作系统的成就之一)的主要开发者,后在Excite担任高级
lucene 添加扩展词需要重新索引_电商检索基础之Lucene
各位专栏的老朋友们,好久不见,别来无恙。主要内容:为什么需要Lucene?Lucene初印象Lucene是干嘛的?Lucene会很笨重吗?我应该把Lucene/Solr放哪?Lucene如何实现全文检索什么是全文检索文档入库分词索引从搜索框到索引库:一个关键词的冒险之旅为什么需要Lucene?任何一项技术的诞生,肯定是为了应对新需求的挑战。之所以有Lucene,简单来说就是在某些场景中,MySQL...
Lucene索引的增删改查和二次检索
本博客是本人使用lucene时写的工具类。包含对索引的增删改查。以及对检索结果的多次子检索。lucene结果高亮显示
什么是全文检索、倒排索引和Lucene
倒排索引就是讲数据中的词拆分构建一个大表,将关键字拆出来,后面带上这个文章的documentid号,例如中间这个就是倒排索引了。 全文检索就比较好理解的,就是当我们输入“全瓦解”,会被拆分成”全”,“瓦解”2个此,用2个词去倒排索引里面去检索数据,检索到的数据返回。整个过程就叫做全文检索 lucene:就是一个jar包,里面包含了封装好的各种建立倒排索引,以及进行搜索的代码,包括各种算法。我...
959



被折叠的 条评论
为什么被折叠?



