lucene的多个字段搜索以及分页并高亮显示

Lucene的高级使用之高亮显示 1.1、高亮显示 原理: 1)给所有关键字加上一个HTML标签 2)给这个特殊的标签设置CSS样式 代码实现: // 高亮显示 @Test public void testHighlighter() throws Exception { // 目录对象 Directory directory = FSDirectory.open(... 阅读详情

package mutilSearch;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.lucene.analysis.Analyzer;
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.IndexWriter;
import org.apache.lucene.queryParser.MultiFieldQueryParser;
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.Sort;
import org.apache.lucene.search.SortField;
import org.apache.lucene.search.highlight.Formatter;
import org.apache.lucene.search.highlight.Highlighter;
import org.apache.lucene.search.highlight.InvalidTokenOffsetsException;
import org.apache.lucene.search.highlight.QueryScorer;
import org.apache.lucene.search.highlight.Scorer;
import org.apache.lucene.search.highlight.SimpleFragmenter;
import org.apache.lucene.search.highlight.SimpleHTMLFormatter;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.LockObtainFailedException;
import org.apache.lucene.store.RAMDirectory;
import org.apache.lucene.util.Version;

public class MutilLucene {
 // lucene 的 多字段搜索
 public static void main(String args[]) throws CorruptIndexException,
   LockObtainFailedException, IOException, ParseException {
  try {
   MutilLucene.doSearch("校内 伙一举一动往往 前", 1, 100);
  } catch (Exception ex) {
   // TODO
  }
 }
 @SuppressWarnings("deprecation")
 // 把Warning去掉
 public static void doSearch(String keyword, int page, int pageSize)
   throws Exception {
  Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_CURRENT);

  // Store the index in memory:
  Directory directory = new RAMDirectory();
  // To store an index on disk, use this instead:
  // Directory directory = FSDirectory.open("/tmp/testindex");
  IndexWriter iwriter = new IndexWriter(directory, analyzer, true,
    new IndexWriter.MaxFieldLength(25000));
  Post post = new Post();
  post.setPostId(10001);
  post.setTitle("校内八大俗");
  post.setContent("有网友总结校内网类网站的八大俗: 生活常识化妆技,十二星座小秘密; 不看后悔成功录,论文大全雅思题。 恋爱金句传送门,男默女泪蛋疼文; 读到哪句心痛了?不顶不是中国人。 相关日志推荐不成熟男人的十个标志中国大学排行榜2010版金融危机十项注意2008十大网络公敌将从我们生活里 ");
  iwriter.addDocument(MutilLucene.buildDocument(post));

  post.setPostId(10002);
  post.setTitle("天使的眼神:一个摄影家镜头中的孩子(上)");
  post.setContent("校内:之前已经有很多关于“天使”的文章了,这些小家伙一举一动往往最能打动我们。今天又收集了一些“天使的眼神”与大家分享,那清澈的眼神是否会直达你的心底,让你的心也一片清澈?   另外,由于图片数量较多,就作两期发布,希望大家喜欢……");
  iwriter.addDocument(MutilLucene.buildDocument(post));

  post.setPostId(10003);
  post.setTitle("冷组总是能出这么伟大的冷笑话");
  post.setContent("鹅李卡|蘑菇蘑菇分享 我的某位友邻说:据说大地震前有三个明显征兆: 1.井水异常;2.牲畜反应异常;3.专家出来辟谣。 但是细心网友指出,第二条和第三条重复了。 然后底下有人回应说:可能是喝了异常的井水。。。 其实专家的嘴就像屁股一样,有图有真相!!!!");

  iwriter.addDocument(MutilLucene.buildDocument(post));
  iwriter.close();

  // Now search the index:
  IndexSearcher isearcher = new IndexSearcher(directory, true); // read-only=true
  // Parse a simple query that searches for "text":
  QueryParser parser = new MultiFieldQueryParser(Version.LUCENE_CURRENT,
    new String[] { "title", "content" }, analyzer);
  Query query = parser.parse(keyword);
  Sort sort = new Sort(); // 排序
  // "postId":排序的字段 SortField.INT:排序方式 false:降序排列 true:升序排列
  sort.setSort(new SortField("postId", SortField.INT, true));
  // 相似度最高的是 1000
  ScoreDoc[] hits = isearcher.search(query, null, 1000, sort).scoreDocs;

  // 关键字高亮显示
  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("length="+hits.length);
  
  //分页测试
  List list = MutilLucene.processHits(hits, isearcher, 1, 1);
   Map map  =new HashMap();
   for (int i=0; i<list.size(); i++){
    map=(Map) list.get(i);
    System.out.println(map.get("postId")+map.get("title").toString());
   }
  System.out.println("size="+list.size());
  
  
  // Iterate through the results:
  for (int i = 0; i < hits.length; i++) {
   Document hitDoc = isearcher.doc(hits[i].doc);
   System.out.println(hitDoc.get("postId") + ":" + hitDoc.get("title"));
   // 高亮显示 关键字 中的内容
//   try {
//    String title = highlighter.getBestFragment(analyzer, "title",hitDoc.get("title"));
//    // String content = highlighter.getBestFragment(analyzer,
//    // "content", hitDoc.get("content"));
//    System.out.println("title=" + title);
//    // System.out.println("content"+content);
//   } catch (InvalidTokenOffsetsException e) {
//    e.printStackTrace();
//   }
  }
  isearcher.close();
  directory.close();
 }

 private static Document buildDocument(Post post) {
  Document doc = new Document();
  doc.add(new Field("postId", String.valueOf(post.getPostId()),
    Field.Store.YES, Field.Index.NOT_ANALYZED));
  doc.add(new Field("title", String.valueOf(post.getTitle()),
    Field.Store.YES, Field.Index.ANALYZED));
  doc.add(new Field("content", String.valueOf(post.getContent()),
    Field.Store.YES, Field.Index.ANALYZED));
  return doc;
 }

 // lucence 分页 方法  Hits中保存的并不是真正的Document  将所查到的内容重新装入 list
 private static  List processHits(ScoreDoc[] hits,IndexSearcher isearcher, int startIndex, int endIndex)
   throws Exception {
  if (endIndex >= hits.length)
   endIndex = hits.length - 1;
  List docs = new ArrayList();
  for (int i = startIndex; i <= endIndex; i++) {
   Document document = isearcher.doc(hits[i].doc);
   Map docMap = new HashMap();
   docMap.put("postId", document.getField("postId").stringValue());
   docMap.put("title", document.getField("title").stringValue());
   docMap.put("content", document.getField("content").stringValue());
   docs.add(docMap);
  }
  return docs;
 }

}

分布式搜索elasticsearch java API 之 highlighting (对搜索结果的高亮显示) elasticsearch highlighting 实现对搜索结果的一个或者多个字段进行高亮. 使用Lucene的 fast-vector-highlighter 或者highlighter 来实现. 更多内部细节可以查看http://www.elasticsearch.org/guide/reference/api/search/highlighting.html。      搜索请 阅读详情

相关推荐

autoDL算力云装Xinference[坑与步骤]

在页面直接点击下载会出现下着下载进度条消失,试了几次才出现这个报错,现在我们就继续安装缺少的包吧。这一步成功绕开了系统盘空间限制。先租用一个合适的服务器,建议不要选最新版本,跟我选的一样即可,不然后面会出现。最近在 AutoDL 上尝试部署。🚫 不要直接使用以下命令。点击下面链接即可打开。

ngadminq的博客 2382

Lucene全文检索从入门到精通(精细讲解含代码笔记答疑服务)

Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎。通过本次课程的学习实现类似百度、京东商城等应用的全文检索效果;

康耐视CogPMAlignTool模板匹配详解

康耐视CogPMAlignTool是一款基于边缘特征的模板匹配工具,适用于工业视觉检测。该工具提供PatMax、PatQuick、PatFlex等不同算法,分别对应高精度、快速匹配和柔性表面等应用场景。关键参数包括特征粒度(粗糙/精细)、边缘阈值、弹性范围等,支持旋转缩放匹配和极性忽略功能。工具操作流程包括图像采集、参数设置、模板训练和运行检测,通过调整查找概数、接收阈值等参数可优化识别效果。配套的卡尺工具(CogCaliperTool)通过一维投影和边缘筛选实现精准定位,适用于高精度尺寸测量场景。

2502_92473474的博客 1317

lucene3.0中使用MultiFieldQueryParser多字段查找

使用Lucene做全文检索,一般我们经常会在多个字段(域)中查找,而不一定关心在那个字段中包含需要查找的值.比如在搜索框中输入:亲亲宝宝 软件开发,只要标题、内容、作者等包含“亲亲宝宝 软件开发”都是我们要查找的结果。Lucene中MultiFieldQueryParser正好给我们提供多字段查找带来方便. MultiFieldQueryParser multiParser= new Mul...

weixin_34185320的博客 534

保姆级教程:用QSTEM和DrProbe搞定你的第一张STEM模拟图(附Fe3O4实例文件)

本文提供了一份详细的STEM模拟图像生成教程,涵盖从晶体结构获取到最终图像模拟的全过程。通过QSTEM和DrProbe软件的操作指南,帮助材料科学研究者快速掌握STEM模拟技术,特别适合初学者。教程包含Fe3O4实例文件,详细解析参数设置、计算优化和结果分析等关键步骤。

weixin_33730836的博客 523

基因组研究之单倍型T2T基因组(一)

单倍型T2T基因组(Haplotype-resolved T2T genome)是一种高精度、高连续性、高完整性的基因组组装技术,它能够提供从端粒到端粒的完整基因组序列,包括所有的基因和非编码序列。完整覆盖:T2T基因组覆盖从端粒到端粒的染色体序列,包含所有的基因和非编码序列,包括以往难以解析的端粒和着丝粒区域。单倍型解析:单倍型T2T基因组能够区分来自父母本的遗传信息,进行亚基因组不对称演化研究,挖掘单倍型等位基因间的表达差异,这对于重测序、性状定位、进化、基因功能、基因编辑等研究至关重要。

2401_89507557的博客 2438

lucene4下用MultiFieldQueryParser同时搜索多个field时

因为工作中突然要用到lucene,就到官网上下了lucene4.7的jar包和文档,回头开始学习的时候才发现,网上lucene相关的资料大部分都停留在3.*阶段,于是结合前辈的代码,自己写了下面一个例子,该例子可以实现对mysql数据库中单个表的索引和多字段同时搜索以及按各个字段设定的权重对结...

chunli5093的博客 600

021、反激变换器的软启动设计

本文分享了反激变换器软启动设计的实践经验。作者通过一次上电炸机事故引出软启动的重要性,分析了启动瞬间电流冲击和环路饱和问题。介绍了三种软启动方案:效果差的RC电路、推荐使用的数字芯片方案以及分立元件实现方法,重点指出数字方案的一致性优势。文章还探讨了软启动与过流保护的配合问题,提供了实测波形、温度影响等调试要点,并总结出软启动时间选择、批量生产一致性等实用建议。最后强调软启动是电源可靠性的关键设计,不应为节省成本而忽略。全文包含多个工程实践细节,对电源设计人员具有重要参考价值。(149字)

Jack010169的博客 173

lucene查询之 MulitFieldQueryParser 可以指定多个默认搜索域;及代码示例;代码实现

1.1.1. MulitFieldQueryParser 可以指定多个默认搜索域 @Test public void testMultiFiledQueryParser() throws Exception { IndexSearcher indexSearcher = getIndexSearcher(); //可以指定默认搜索的域是多个 String[] fiel

boss_way的博客 2486

YOLOv11低照度增强主干网络PE-YOLO:原理与完整实现教程

编码器部分# 解码器部分self.dec_conv2 = nn.Conv2d(512, 128, 3, padding=1) # 跳跃连接self.dec_conv3 = nn.Conv2d(256, 64, 3, padding=1) # 跳跃连接self.dec_conv4 = nn.Conv2d(128, 32, 3, padding=1) # 跳跃连接# 编码路径# 解码路径(带跳跃连接)

FJN110的博客 724

基于YOLOv10的建筑图纸物体检测系统:从数据集构建到UI界面实现

高度结构化的图形元素标准化的符号和标注系统多层次的细节表达精确的尺寸和位置关系。

YOLO 389

lucene-多Field搜索与多索引搜索

1、多域搜索MultiFieldQueryParser提供了3个静态方法1)在不同的Field进行不同的查找public static Query parse(String[] queries,String[] fields,Analyzer analyzer) throws ParseException2)在不同的Field上进行同一查找,指定它们之间的布尔关系public

深未来技术 730

点云从入门到精通技术详解100篇-基于点云语义分割的电力线提取及聚类研究

在现代社会,电力一直扮演着最重要的角色之一。它不仅与人民的生活息息相关,更是一个国家发展的命脉。近年来,随着我国各特高压输电线路建成(比如2022年1月份白鹤滩江苏特高压输电线路的放线)以及电网规模的不断扩大,我国年发电量稳步上升,人民的生活水平越来越高。我国土地辽阔,输电线路分布广泛,再加上地形环境复杂多样,电力线可能遭受风吹雨晒甚至是冰雪寒灾的影响。因此,为了保障电力线的可靠供电,防止停电意外发生,电力部门要定期对输电线路进行检查。目前我国主要。

getusushu的博客 1010

Lucene介绍与使用

1、了解搜索技术 1.1 什么是搜索 简单的说,搜索就是搜寻、查找,在IT行业中就是指用户输入关键字,通过相应的算法,查询并返回用户所需要的信息。 1.2 普通的数据库搜索 类似:select * from 表名 where 字段名 like ‘%关键字%’ 例如:select * from article where content like ’%here%’ 结果: where here...

但行好事 莫问前程 9万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

搜索中两种高亮显示方式

以下提供常见两种方式处理搜索时高亮显示。目前鉴于商麦系统中大量字段没有保存。solr返回ID。所以建议采用第一种方式处理。 处理方式为通过velocity模板工具注入工具类,提供静态方法。进行解析。达到高亮显示。 注意:高亮显示的分词器最好喝solr分词器一致 1、搜索词之后进行高亮显示。使用lucene处理高亮显示词 /** * 用户分词高亮 * 在content中查找key

wangzhaodong001的专栏 4478

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Lucene多字段查询&高亮显示

在百度搜索的时候,查询的关键词会高亮显示 在搜索一个关键词的时候,有可能这个关键词在title和content中,搜索的时候要把结果全部显示出来 实例说明package com.bart.lucene.mutilseacher;import java.util.ArrayList; import java.util.List; import org.apache.lucene.document.Do

Bart_G的博客 3593

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

lucene实现分页,排序,分词器分词的关键字高亮显示

1. 首先需要导包 需要导入lucene包,还有中文分词器ik包,还有高亮显示包 package com.ouhuizhong.search.lucene处理分页和排序; import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.document.Document; import org.apache.lu...

ouhuizhong的博客 205

Lucene开发实例教程:Lucene中文分词、分页查询、高亮显示

1、准备工作 下载lucene 3.6.1 : http://lucene.apache.org/ 下载中文分词IK Analyzer: http://code.google.com/p/ik-analyzer/downloads/list (注意下载的是IK Analyzer 2012_u5_source.zip,其他版本有bug) 下载solr 3.6.1:  h

北风网IT 1109

3步把微信聊天记录导出成文档:WeChatMsg 使用教程

翻三年前的聊天记录,翻到眼睛发酸、手指发酸,记录却还散在电脑硬盘里随时可能丢。开源项目 WeChatMsg 把这件事做成了 3 步:读取电脑版微信存在本地的聊天记录数据库,一键导出成 HTML、Word、CSV 文档永久保存,还能生成年度聊天报告。读完你能拿到: 1. 一份能在自己电脑上直接跑通的导出流程; 2. 第一份可以打开、打印、分享的聊天记录档案; 3. 一套避开常见坑的检查清单。 #

gitblog_00039的博客 935

Lucene(1):Springboot整合全文检索引擎Lucene常规入门附源码

如何自己构建一个单机的博客检索引擎?本章代码已分享至Gitee:Lucene是一个开源的全文搜索引擎工具包,它提供了用于创建、索引和搜索大量文本的API和工具。Lucene最初是由Doug Cutting于1999年创建,目的是提供一个高效、可扩展的搜索引擎。Lucene的主要特点包括:高性能:Lucene使用倒排索引来加速搜索,这使得它能够快速地检索和排序文档。可扩展性:Lucene支持大规模文本索引和搜索操作,并可以通过水平扩展来处理更大量级的数据。

不积跬步,无以至千里 2008

Lucene高亮显示详解

在Lucene的org.apache.lucene.search.highlight包中提供了关于高亮显示检索关键字的工具。使用百度、 Google搜索的时候,检索结果显示的时候,在摘要中实现与关键字相同的词条进行高亮显示,百度和Google指定红色高亮显示。有了Lucene提供的高亮显示的工具,可以很方便地实现高亮显示的功能。高亮显示,就是根据用户输入的检索关键字,检索找到该关键字对应的

frjcy的专栏 1331

搜索实现之lucene

Lucene是一套用于全文检索和搜寻的开源程序库,由Apache软件基金会支持和提供Lucene提供了一个简单却强大的应用程序接口(API),能够做全文索引和搜寻,在Java开发环境里Lucene是一个成熟的免费开放源代码工Lucene并不是现成的搜索引擎产品,但可以用来制作搜索引擎产品。官网:http://lucene.apache.org/

swimming_in_IT_的博客 650

Lucene.net 搜索引擎技术 及分页

http://www.liveq.net/?p=142  详细使用技术http://space.cnblogs.com/group/topic/4683/   相关技术http://www.liveq.net/?p=169  创建索引1.首先得把Lucene.Net.dll这个添加引用;2.Highlighter.Net.dll 可选,用于查询字体高亮度显示;            /// 建立索

蚩尤Love 849

Apache Lucene核心API详解:快速掌握索引和搜索操作

Apache Lucene作为业界领先的开源搜索引擎库,为开发者提供了强大的全文检索能力。在前100个词中,我们将重点介绍Lucene的核心API功能,帮助您快速掌握索引创建和搜索操作的关键技术要点。 ## 🔍 Lucene核心架构概述 Apache Lucene采用倒排索引技术,将文档内容转换为可快速搜索的数据结构。其核心架构主要包括**索引模块**和**搜索模块**两大组成部分,为各种应

gitblog_00116的博客 692

Spring Boot中集成Lucene(十一)

大家好,我是默语,一个专注于技术分享的博主。今天我们来探讨Spring Boot中集成Lucene的话题。在大数据时代,海量文本数据的高效检索变得尤为重要。Apache Lucene 是一个高性能、可扩展的全文搜索库,可以帮助我们快速建立索引并进行搜索。在这篇文章中,我们将深入探讨Lucene的基本概念,如何在Spring Boot项目中集成Lucene,并通过代码示例展示中文分词检索和高亮显示的实现。通过这篇文章,您将掌握Spring Boot与Lucene集成的关键技术,提升应用的搜索功能。

沉淀所学,分享所思,让热爱与成长同行。商务记录AI实战经验,助力开发者快速成长。 热爱AI,希望做出有影响力的技术成果。 技术点亮生活,分享连接价值与机会。 专注AI落地实战,陪你走好技术每一步。 5万+
上一篇: lucene分布式索引(转)
下一篇: jquery基本用法
技术宝哥
博客等级 码龄16年 331粉丝 222原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值