Lucene3.5例子

Lucene(3.5)解析查询表达式:QueryParser package com.test.lucene; import java.io.File; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; imp 阅读详情

原文地址:http://www.juziku.com/sunlightcs/wiki/4205.htm

Lucene3.5+IK分词器的例子,Lucene3.5改动有点大,很多方法都不推荐使用了。 
示例代码如下所示: 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
import  java.io.File;
import  java.io.IOException;
 
import  org.apache.lucene.analysis.Analyzer;
import  org.apache.lucene.document.Document;
import  org.apache.lucene.document.Field;
import  org.apache.lucene.index.IndexReader;
import  org.apache.lucene.index.IndexWriter;
import  org.apache.lucene.index.IndexWriterConfig;
import  org.apache.lucene.index.Term;
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.search.highlight.Formatter;
import  org.apache.lucene.search.highlight.Highlighter;
import  org.apache.lucene.search.highlight.QueryScorer;
import  org.apache.lucene.search.highlight.Scorer;
import org.apache.lucene.search.highlight.SimpleHTMLFormatter;
import  org.apache.lucene.store.Directory;
import  org.apache.lucene.store.FSDirectory;
import  org.apache.lucene.util.Version;
import  org.wltea.analyzer.lucene.IKAnalyzer;
import  org.wltea.analyzer.lucene.IKSimilarity;
 
 
/**
  * lucene3.5+ik的例子
  *
  * @author steven
  * @date   2012-3-1 下午2:12:24
  */
public  class  LuceneDemo {
     //索引文件位置
     File dataFile =  new  File( "D://indexFile" );
     //使用IK分词器
     Analyzer analyzer =  new  IKAnalyzer();
     
     
     public  void  bulidIndex(){
         Directory directory =  null ;
         IndexWriter writer =  null ;
         try  {
             directory = FSDirectory.open(dataFile);
             
             IndexWriterConfig writerConfig =  new IndexWriterConfig(Version.LUCENE_35, analyzer);
             writer =  new  IndexWriter(directory, writerConfig);
             
             writer.addDocument(addDocument( 1 ,  "聚资库" ,  "聚资库,是以分享知识与经验的学习交流平台,加入聚资库,学习新知识、结交新朋友、塑造个人形象。" ));
             writer.addDocument(addDocument( 2 ,  "聚资库" ,  "聚资库,是以分享知识与经验的学习交流平台,加入聚资库,学习新知识、结交新朋友、塑造个人形象。" ));
             writer.addDocument(addDocument( 3 ,  "聚资库" ,  "聚资库,是以分享知识与经验的学习交流平台,加入聚资库,学习新知识、结交新朋友、塑造个人形象。" ));
             writer.addDocument(addDocument( 4 ,  "资料" ,  "聚资库,是以分享知识与经验的学习交流平台,加入聚资库,学习新知识、结交新朋友、塑造个人形象。" ));
             writer.addDocument(addDocument( 5 ,  "微知识" ,  "聚资库,是以分享知识与经验的学习交流平台,加入聚资库,学习新知识、结交新朋友、塑造个人形象。" ));
             
         } catch (Exception ex){
             ex.printStackTrace();
         }  finally  {
             try  {
                 writer.close();
                 directory.close();
             }  catch  (Exception e) {
                 e.printStackTrace();
             }
         }
     }
     
     
     /**
      * 添加Document
      */
     public  Document addDocument(Integer id, String title, String content) {
         Document doc =  new  Document();
         
         //Field.Index.NO 表示不索引
         //Field.Index.ANALYZED 表示分词且索引
         //Field.Index.NOT_ANALYZED 表示不分词且索引
         doc.add( new  Field( "id" , String.valueOf(id), Field.Store.YES, Field.Index.NOT_ANALYZED));
         doc.add( new  Field( "title" , title, Field.Store.YES, Field.Index.ANALYZED));
         doc.add( new  Field( "content" , content, Field.Store.YES, Field.Index.ANALYZED));
         
         return  doc;
     }
     
     
     /**
      * 更新索引
      */
     public  void  update(Integer id, String title, String content) {
         try  {          
             Directory directory = FSDirectory.open(dataFile);
             
             IndexWriterConfig writerConfig =  new IndexWriterConfig(Version.LUCENE_35, analyzer);
             IndexWriter writer =  new  IndexWriter(directory, writerConfig);
             
             Document doc = addDocument(id, title, content);
             
             Term term =  new  Term( "id" , String.valueOf(id));
             
             writer.updateDocument(term, doc);
             
             writer.close();
         }  catch  (Exception e) {
             e.printStackTrace();
         }
     }
     
     
     /**
      * 删除索引
      */
     public  void  delete(Integer id) {
         try  {
             Directory directory = FSDirectory.open(dataFile);
             
             IndexWriterConfig writerConfig =  new IndexWriterConfig(Version.LUCENE_35, analyzer);
             IndexWriter writer =  new  IndexWriter(directory, writerConfig);
             Term term =  new  Term( "id" , String.valueOf(id));
             writer.deleteDocuments(term);
             
             writer.close();
         }  catch  (Exception e) {
             e.printStackTrace();
         }
     }
     
     
     /**
      * 搜索
      * @param where   搜索条件   
      * @param after   分页时要用到,不分页时为null
      */
     public  void  search(String where, ScoreDoc after) {
         IndexSearcher isearcher =  null ;
         Directory directory =  null ;
         try  {
             directory = FSDirectory.open(dataFile);
             
             //创建索引搜索器 且只读
             IndexReader reader = IndexReader.open(FSDirectory.open(dataFile), true ); 
             isearcher =  new  IndexSearcher(reader);
             
             //在索引器中使用IKSimilarity相似度评估器
             isearcher.setSimilarity( new  IKSimilarity());
             
             QueryParser parser =  new QueryParser(Version.LUCENE_35,  null , analyzer);
             Query query = parser.parse(where);
             
             //lucene3.5深度分页,每页显示10条记录
             TopDocs topDocs = isearcher.searchAfter(after, query,  10 );
             ScoreDoc[] hits = topDocs.scoreDocs;
             
             //关键字高亮
             Formatter formatter =  new  SimpleHTMLFormatter( "<font color='red'>" ,  "</font>" );
             Scorer scorer =  new  QueryScorer(query);
             Highlighter highlighter =  new Highlighter(formatter, scorer);
 
             for (ScoreDoc scoreDoc : hits){
                 Document hitDoc = isearcher.doc(scoreDoc.doc);
                 String id = hitDoc.get( "id" );
                 String title = hitDoc.get( "title" );
                 String content = hitDoc.get( "content" );
                 float  score = scoreDoc.score;
                 
                 title = highlighter.getBestFragment(analyzer, "title" , title);
                 content = highlighter.getBestFragment(analyzer,  "content" , content);
                 
                 if (title ==  null ){
                     title = hitDoc.get( "title" );
                 }
                 
                 if (content ==  null ){
                     content = hitDoc.get( "content" );
                 }
                 
                 System.out.println( "doc:"  + scoreDoc.doc + "    score:"  + score +  "   id:"  + id +  "   title:"  + title + "    content:"  + content);
             }
             
         }  catch  (Exception e) {
             throw  new  RuntimeException(e);
         }  finally  {
             try  {
                 isearcher.close();
                 directory.close();
             }  catch  (IOException e) {
                 e.printStackTrace();
             }
         }
         
     }
}


测试代码如下所示: 
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2

import  org.apache.lucene.search.ScoreDoc;
import  org.junit.AfterClass;
import  org.junit.BeforeClass;
import  org.junit.Test;
 
public  class  LuceneDemoTest {
     static  LuceneDemo luceneDemo =  null ;
 
     @BeforeClass
     public  static  void  setUpBeforeClass()  throws  Exception {
         luceneDemo =  new  LuceneDemo();
     }
 
     @AfterClass
     public  static  void  tearDownAfterClass()  throws  Exception {
     }
 
     @Test
     public  void  testBulidIndex() {
         luceneDemo.bulidIndex();
     }
 
     @Test
     public  void  testUpdate() {
         luceneDemo.update( 1 ,  "测试更新" ,  "更新内容。。。。" );
     }
 
     @Test
     public  void  testDelete() {
         luceneDemo.delete( 1 );
     }
 
     @Test
     public  void  testSearch() {
         String where =  "title:聚资库 content:学习" ;            //类似SQL为:title='聚资库' or content='学习'
         //String where = "title:聚资库 +content:学习 -id:1";   //类似SQL为:title='聚资库' and content='学习' and id!=1
         //String where = "title:聚资库 -content:学习";         // 类似SQL为:title='聚资库' and content!='学习'
         
         ScoreDoc after =  new  ScoreDoc( 0 , ( float ) 0.032529574 );
         luceneDemo.search(where, after);
         
         //luceneDemo.search(where, null);
     }
 
}
如果想使用庖丁(paoding)分词器,请参考:  http://www.juziku.com/wiki/2327.htm  

深入理解Lucene 3.5.0:掌握lucene-core-3.5.0.jar与lukeall-3.5.0.jar Lucene是一个由Apache软件基金会支持的开源搜索引擎库,广泛应用于全文搜索领域。3.5.0版本是Lucene项目的一个重要里程碑,它不仅包含了对已有功能的增强和改进,还引入了新的特性以满足日益增长的搜索需求。该版本对索引效率和搜索性能进行了优化,增强了对不同语言文本处理的能力,并提供了更多的API扩展点以支持自定义需求。本章将概述Lucene 3.5.0版本的核心特性,为后续章节更深入的技术探讨和应用场景分析奠定基础。Lucene是一款开源的全文检索引擎库,为文本数据提供了索引和搜索的功能。 阅读详情

相关推荐

lucene3.5的各种包

几个经常用到的包,有中文分词器,核心包,高亮包...等等

Lucene 3.5.0学习笔记

Lucene 3.5.0学习笔记 1. 整个全文搜索引擎就是建立索引,查找索引的一个过程。 2. 几个重要的概念: Directory:目录(分为RAMdirectory 和 FSDdirectory ,用于存放文件和索引的目录) Analyzer:分词器,一般用标准分词器(standardAnalyzer就可以啦) IndexWriter:写索引 IndexReader:读索引 I

huanhuan_tiantian的专栏 1809

coreldraw sp2精简版 x4_CorelDRAW X4下载-CorelDRAW X4 SP2 精简版_Win10镜像官网

CorelDRAW X4 SP2是一个专业图形设计软件,专用于矢量图形编辑与排版,借助其丰富的内容和专业图形设计、照片编辑和网站设计软件,您将能够随心所欲地表达自己的风格与创意,轻松创作徽标标志、广告标牌、车身贴和传单、模型绘制、插图描画、排版及分色输出等。CorelDRAW X4 SP2软件特色CorelDraw X4 相比两年前的 CorelDraw X3 加入了大量新特性,总计有50项以上,...

weixin_30346025的博客 8883

9、学习Lucene3.5索引搜索之其他搜索

panchang199266的博客 291

什么是深度展开网络?如何将迭代算法的每一次迭代展开成深度网络对应的一层?深度展开网络进行端对端训练,其中端对端是什么意思?

在深度学习和机器学习的背景下,“端到端”(End-to-end)训练指的是将输入数据直接映射到最终输出的过程,而不需要任何中间的手动数据预处理或特征工程。- **自然语言处理**:端到端自然语言处理系统可以将自然语言输入直接转化为计算机可理解的语言输出,而不需要对语言进行分解和转化。- **推荐系统**:通过使用深度神经网络,端到端推荐系统可以直接根据用户历史行为预测其未来的兴趣爱好,并推荐相应的产品或服务。4. **直接映射**:从输入到输出的直接映射,中间没有任何拆分或分解的过程。

m0_67897882的博客 5423

从补码原理到实践:RISC-V中addi指令的符号扩展机制详解

本文深入解析了RISC-V架构中addi指令的符号扩展机制。从补码的数学原理出发,详细阐述了12位立即数在指令编码中如何通过符号位进行扩展,并结合lui指令,揭示了加载任意32位立即数的正确方法与实践陷阱,帮助开发者编写高效可靠的底层代码。

weixin_29161719的博客 139

一、lucene3.5的创建和增删改查

1、工程结构 2、索引创建时的属性: Field.Store.YES或者NO(存储域选项) 设置为YES表示或把这个域中的内容完全存储到文件中,方便进行文本的还原 设置为NO表示把这个域的内容不存储到文件中,但是可以被索引,此时内容无法完全还原(doc.get) Field.Index(索引选项) Index.ANALYZED:进行分词和索引,适用于标题、内容等 Inde

学习笔记 4346

YOLOv8 ultralytics使用笔记----labelme标记数据,训练模型、追踪目标。

Ultralytics是一个Python库,它是为执行高级计算机视觉任务而创建的,如对象检测、实例分割、图像分类等。Ultralytics为YOLO模型发布了一个全新的存储库,它被构建为用于机器视觉统一框架。这里先利用,并激活。

qq_48050838的博客 1万+

lucene 3.5学习笔记

最近一段时间在研究lucene的使用,可以说lucene的功能确实很强大,我只是略沾皮毛,下面是我学习lucene的过程。 开发环境:eclipse3.7; lucene版本:3.5 功能需求是:对50万的简历数据可以进行多关键字的查询,查询响应时间控制在3S中以内。 需要说明的是,我的简历数据是放在数据库表里面的,数据库对于l...

由由小和尚 204

鼎阳示波器SCPI指令与MD5算法解锁带宽升级实战

本文详细介绍了鼎阳示波器通过SCPI指令与MD5算法实现带宽升级的实战流程。从设备连接、信息获取到Python密钥生成脚本解析,逐步指导用户完成升级操作,并涵盖常见问题排查与功能选件激活指南,帮助用户充分释放设备潜能。

www00的博客 340

基于STM32、HAL库的AD7124-8BCPZ模数转换器ADC驱动程序设计

/ 配置0: 使用内部参考电压(2.5V),增益128,双极性。// 配置通道0: AIN0+和AIN1-,使用配置0和滤波器0。// 100ms采样间隔。// 转换为电压值(使用内部2.5V参考电压)// 构造读命令: 最高位为1表示读,接下来7位是寄存器地址。// 构造写命令: 最高位为0表示写,接下来7位是寄存器地址。// 配置滤波器0: 输出数据率50Hz,后置滤波器4。

corlin6688的博客 528

lucene3.5例子

[code="java"]package com.lucene; import java.io.*; import java.util.HashMap; import java.util.Iterator; import java.util.Set; import org.apache.lucene.analysis.Analyzer; import org.apache.lu...

Welcome 198

《Python等级认证CCF-GESP真题解析》专栏总目录

❤️ 专栏名称:《🌸 专栏介绍:中国计算机学会GESP《CCF编程能力等级谁》Python编程(1~8级)历届真题解析。🚀 订阅专栏:订阅后可阅读专栏内所有真题解析,真题持续更新中,限时9.9元,欢迎订阅!

人生就是一个不断学习的过程 1878

lucene 3.5 例子

在开始学习lucene时,在网上找到很多的例子,全部是早期的版本,在lucene3.5时,好多方法已不推荐使用,所以就自己写了个例子,方便大家学习 1,创建一个实体类 [java] view plaincopy package com.yutel.lucene;    public class ContactInfo {      private int id;

edisonkun的专栏 1400

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

学习lucene3.5时,做的一个小例子

在开始学习lucene时,在网上找到很多的例子,全部是早期的版本,在lucene3.5时,好多方法已不推荐使用,所以就自己写了个例子,方便大家学习 1,创建一个实体类 package com.yutel.lucene; public class ContactInfo { private int id; private String FirstName; private Strin

yutel的专栏 4267

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

lucene使用IKAnalyzer3.2.5中文分词器进行索引的一个小例子

本文通过一个小例子方便大家学习IKAnalyzer3.2.5和lucene的索引功能。以下是需要的准备环境  需要两个jar包。 分别是lucene 3.5.0.jar和IKAnalyzer3.2.5两个包 代码如下: import java.io.File; import java.io.IOException; import org.apache.lucene.analysis

hiphopmattshi的专栏 6797

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Lucene3.5 实例

方法主体 package cn.vincent; import java.io.File; import java.io.IOException; import java.util.logging.SimpleFormatter; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.cn

Xwin1989的专栏 3277

Lucene3.5 实现创建索引和搜索实例

                        最近在做关于大数据量查询,发现Lucene是个不错的选择。关于Luncene3.5的代码在网上不是很多,参考网上一些代码并看API,做出如下代码,有什么问题,给留言。             1.数据库作为数据源,创建索引:                //创建索引 public void createIndex(Open...

steve_19851023的博客 180

lucene5.3.1的排序是怎么实现的?

排序有两种方式,在只有一个排序字段的情况下,分别看下这两种方式的实现方式。 1.在索引阶段生成排序索引(dvm,dvd): 在添加正常的字段后再添加一个该字段的SortedDocValuesField到document,即可按这个字段排序。 SortedDocValuesField pathField = new SortedDocValuesField("path", new

北漂程序员-中中 951

Lucene5.3.1 使用的简单实例(待9月更新)

Lucene是一个基于Java的开源全文信息检索工具包。 MyTest.Java public class MyTest { /// 存放需要分析的文件的地址 private static String FILE_PATH = "/Users/zoujs/Desktop/test4lucene"; // 存放索引的位置 ...

weixin_33924220的博客 160

每日一练 Lucene3.5 建立索引

今天不练习lucene2.0.1了练习一下最新版本的lucene3.5 package jim.Lucene35; import java.io.File; import java.io.IOException; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.do

jimzhai的专栏 2394

lucene3.5 example

lucene3.5 example /** To change this template, choose Tools | Templates* and open the template in the editor.*/package com.jd.luce...

175

lucene 5.3.1

依赖包 org.apache.lucene lucene-core 5.3.1 org.apache.lucene lucene-queryparser 5.3.1 org.apache.lucene lucene-analyzers-common 5.3.1 org.apache.lucene lucene-ana

爱笑的博客 731

Lucene 3.5.0 下载、安装与测试

若想了解Lucene项目的概况(Apache Lucene - overview):http://lucene.apache.org/java/docs/index.html 【1.】下载            下载地址:http://apache.etoak.com//lucene/java/             我下载的是lucene 3.5.0版本,具体文件是:lucene-3

zhangcan919的专栏 2440

基于Lucene3.5.0如何从TokenStream获得Token

通过学习Lucene3.5.0的doc文档,对不同release版本 lucene版本的API改动做分析。最后找到了有价值的改动信息。 LUCENE-2302: Deprecated TermAttribute and replaced by a new CharTermAttribute. The change is backwards compatible, so mixed new/old

hiphopmattshi的专栏 1万+
上一篇: Lucene分词器之庖丁解牛
下一篇: JSP和Servlet
ld_flex
博客等级 码龄16年 26粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值