- 浏览: 548989 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (478)
- lucene (45)
- oracle (19)
- nutch (2)
- blog (2)
- 垂直搜索 (19)
- java综合 (89)
- spring (15)
- Hibernate (9)
- Struts (9)
- Hadoop (16)
- Mysql (12)
- nosql (10)
- Linux (3)
- MyEclipse (4)
- Ant (1)
- 设计模式 (19)
- JBPM (1)
- JSP (1)
- HtmlParser (5)
- SVN (2)
- 插件 (2)
- 收藏 (7)
- Others (1)
- Heritrix (18)
- Solr (4)
- 主题爬虫 (31)
- 内存数据库 (24)
- 分布式与海量数据 (32)
- httpclient (14)
- Tomcat (1)
- 面试宝典 (6)
- Python (14)
- 数据挖掘 (1)
- 算法 (6)
- 其他 (4)
- JVM (12)
- Redis (18)
最新评论
-
hanjiyun:
本人水平还有待提高,进步空间很大,看这些文章给我有很大的指导作 ...
JVM的内存管理 Ⅲ -
liuxinglanyue:
四年后的自己:这种方法 不靠谱。 使用javaagent的方式 ...
计算Java对象占用内存空间的大小(对于32位虚拟机而言) -
jaysoncn:
附件在哪里啊test.NoCertificationHttps ...
使用HttpClient过程中常见的一些问题 -
231fuchenxi:
你好,有redis,memlink,mysql的测试代码吗?可 ...
MemLink 性能测试 -
guyue1015:
[color=orange][/color][size=lar ...
JAVA同步机制
package com.diyi.util; import java.io.File; import java.io.IOException; import java.io.StringReader; import java.util.ArrayList; import java.util.List; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.Term; import org.apache.lucene.queryParser.MultiFieldQueryParser; import org.apache.lucene.search.BooleanClause; import org.apache.lucene.search.BooleanQuery; import org.apache.lucene.search.FuzzyQuery; import org.apache.lucene.search.Hits; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.MultiSearcher; import org.apache.lucene.search.PrefixQuery; import org.apache.lucene.search.Query; import org.apache.lucene.search.RangeQuery; import org.apache.lucene.search.Sort; import org.apache.lucene.search.TermQuery; import org.apache.lucene.search.WildcardQuery; import org.apache.lucene.search.highlight.Highlighter; import org.apache.lucene.search.highlight.QueryScorer; import org.apache.lucene.search.highlight.SimpleFragmenter; import org.apache.lucene.search.highlight.SimpleHTMLFormatter; import org.mira.lucene.analysis.IK_CAnalyzer; import com.diyi.core.web.BaseAction; public class LuceneTest extends BaseAction{ private static final long serialVersionUID = 1L; /* * lucene全功能,几乎包含了大部分查询综合起来。, */ static String path="e:\\Lucene测试\\"; static String ArticleTitle="ArticleTitle"; static String ArticleText="ArticleText"; static String ArticleTime="ArticleTime"; public static void index() throws Exception { /* 创建索引初始化,执行这些语句将创建或清空d:\\save\\目录下所有索引 */ File file=new File(path); if(file.isDirectory()) { file.delete(); } IK_CAnalyzer ikAnalyzer=new IK_CAnalyzer(); IndexWriter writer1 = new IndexWriter(path,ikAnalyzer, true); writer1.close(); // IndexReader indexReader=IndexReader.open(path); // indexReader.deleteDocument(1); /* * 往创建的初始化索引中添加索引内容,StandardAnalyzer表示用lucene自带的标准分词机制, * false表示不覆盖原来该目录的索引,细心的读者可能已经发现, 这句话和上面的那句就这个false不一样 */ IndexWriter writer2 = new IndexWriter(path, ikAnalyzer, false); /* 创建一份文件 */ Document doc1 = new Document(); /* * 创建一个域ArticleTitle,并往这个域里面添加内容 "Field.Store.YES"表示域里面的内容将被存储到索引 * "Field.Index.TOKENIZED"表示域里面的内容将被索引,以便用来搜索 * Lucene给文档的字段设定三个布尔变量: 索引(indexed), 存储(stored), 切词(tokenized) , */ Field field1 = new Field(ArticleTitle, "上海2010年世博会,hot,GOOGLE和Yahoo 赞助,test,中华人民共和国万岁", Field.Store.YES, Field.Index.TOKENIZED); /* 往文件里添加这个域 */ doc1.add(field1); /* 同理:创建另外一个域ArticleText,并往这个域里面添加内容 */ Field field2 = new Field(ArticleText, "这是一届创造绿色环境,点燃激情,影响深远的博览会....god..Hotmail,text,foam,OpenOffica", Field.Store.YES, Field.Index.TOKENIZED); doc1.add(field2); Field field3 = new Field(ArticleTime, "2009", Field.Store.YES, Field.Index.TOKENIZED); doc1.add(field3); // 在这里还可以添加其他域 /* 添加这份文件到索引 */ writer2.addDocument(doc1); /* 同理:创建第二份文件 */ Document doc2 = new Document(); field1 = new Field(ArticleTitle, "中国获得全球赞誉,世界人民大团结万岁,text", Field.Store.YES, Field.Index.TOKENIZED); doc2.add(field1); field2 = new Field(ArticleText, "中国上海世博馆雄踞东方,傲视全球........,roams,OpenOffice", Field.Store.YES, Field.Index.TOKENIZED); doc2.add(field2); field3 = new Field(ArticleTime, "2010", Field.Store.YES, Field.Index.TOKENIZED); doc2.add(field3); /* * * */ writer2.addDocument(doc2); // 在这里可以添加其他文件 //writer2.optimize(); /* 关闭 */ writer2.close(); } public String searchIndex() throws Exception { LuceneTest.index(); String keywords=getRequest().getParameter("serchString"); /* 创建一个搜索,搜索刚才创建的目录下的索引 */ IndexSearcher indexSearcher = new IndexSearcher(path); /* 在这里我们只需要搜索一个目录 */ IndexSearcher indexSearchers[] = { indexSearcher }; /* 我们需要搜索两个域ArticleTitle, ArticleText里面的内容 */ String[] fields = {ArticleTitle, ArticleText ,ArticleTime}; /* 下面这个表示要同时搜索这两个域,而且只要一个域里面有满足我们搜索的内容就行 BooleanClause.Occur[]数组,它表示多个条件之间的关系,BooleanClause.Occur.MUST表示and, BooleanClause.Occur.MUST_NOT表示not,BooleanClause.Occur.SHOULD表示or. 1、MUST和MUST表示“与”的关系,即“并集”。 2、MUST和MUST_NOT前者包含后者不包含。 3、MUST_NOT和MUST_NOT没意义 4、SHOULD与MUST表示MUST,SHOULD失去意义; 5、SHOUlD与MUST_NOT相当于MUST与MUST_NOT。 6、SHOULD与SHOULD表示“或”的概念*/ BooleanClause.Occur[] clauses = { BooleanClause.Occur.SHOULD, BooleanClause.Occur.SHOULD,BooleanClause.Occur.SHOULD}; /* * MultiFieldQueryParser表示多个域解析, * 同时可以解析含空格的字符串,如果我们搜索"上海 中国" */ Analyzer analyzer=new IK_CAnalyzer(); Query multiFieldQuery = MultiFieldQueryParser.parse(keywords, fields, clauses, analyzer); Query termQuery= new TermQuery(new Term(ArticleTitle, keywords));//词语搜索,完全匹配,搜索具体的域 Query wildqQuery=new WildcardQuery(new Term(ArticleTitle,keywords));//通配符查询 Query prefixQuery=new PrefixQuery(new Term(ArticleText,keywords));//字段前缀搜索 Query fuzzyQuery=new FuzzyQuery(new Term(ArticleText,keywords));//相似度查询,模糊查询比如OpenOffica,OpenOffice Query rangQuery=new RangeQuery(new Term(ArticleTime,keywords), new Term(ArticleTime,keywords), true);//数字范围查询 /* Multisearcher表示多目录搜索,在这里我们只有一个目录 */ MultiSearcher searcher = new MultiSearcher(indexSearchers); //多条件搜索 BooleanQuery multiQuery=new BooleanQuery(); multiQuery.add(wildqQuery, BooleanClause.Occur.SHOULD); multiQuery.add(multiFieldQuery, BooleanClause.Occur.SHOULD); multiQuery.add(termQuery, BooleanClause.Occur.SHOULD); multiQuery.add(prefixQuery, BooleanClause.Occur.SHOULD); multiQuery.add(fuzzyQuery, BooleanClause.Occur.SHOULD); multiQuery.add(rangQuery, BooleanClause.Occur.SHOULD); Sort sort=new Sort(ArticleTime);//排序 /* 开始搜索 */ Hits h = searcher.search(multiQuery,sort); String highTitle=""; String highText=""; List<String> list=new ArrayList<String>(); /* 把搜索出来的所有文件打印出来 */ for (int i = 0; i < h.length(); i++) { //打印出文件里面ArticleTitle域里面的内容 String title=h.doc(i).get(ArticleTitle); // 打印出文件里面ArticleText域里面的内容 String text=h.doc(i).get(ArticleText); SimpleHTMLFormatter format=new SimpleHTMLFormatter("<b><font color='red'>","</font></b>"); Highlighter light=new Highlighter(format, new QueryScorer(multiQuery));//高亮 light.setTextFragmenter(new SimpleFragmenter(200)); if(title!=null) { TokenStream stream=analyzer.tokenStream(ArticleTitle, new StringReader(title)); highTitle=light.getBestFragment(stream, title); System.out.println(highTitle); } if(text!=null) { TokenStream streamText=analyzer.tokenStream(ArticleText, new StringReader(text)); highText=light.getBestFragment(streamText, text); System.out.println(highText); } //为了在页面好遍历,把它放入集合中 if(highTitle!=null) { list.add("标题中包含关键字:"+highTitle+"<br/>"); } if(highText!=null) { list.add("内容中包含关键字:"+highText+"<br/>"); } } getRequest().setAttribute("list",list); /* 关闭 */ searcher.close(); return SUCCESS; } public String goToSearch() { return SUCCESS; } // 通配符搜索 WildcardQuery // 通配符包括’?’匹配一个任意字符和’*’匹配零个或多个任意字符,例如你搜索’use*’,你可能找到’user’或者’uses’: public static void wildcardSearcher() throws Exception{ index(); IndexSearcher searcher = new IndexSearcher(path); // 与正则一样,*代表0个或多个字母,?代表0个或一个字母 // WildcardQuery与QueryParser不同的是:WildcardQuery的前缀可以为*,而QueryParser不行 Query query = new WildcardQuery(new Term(ArticleText,"te*")); Hits hits = searcher.search(query); printResult(hits); searcher.close(); } public static void printResult(Hits hits) throws IOException{ for(int i = 0; i < hits.length(); i++){ Document d = hits.doc(i); String title=d.get(ArticleTitle); String text=d.get(ArticleText); String time=d.get(ArticleTime); if(title!=null) { System.out.println(title); } if(text!=null) { System.out.println(text); } if(time!=null) { System.out.println(time); } } } public static void main(String[] args) throws Exception { LuceneTest test=new LuceneTest(); test.wildcardSearcher(); LuceneTest .searchIndex(); } }
发表评论
-
关于Lucene的讨论
2011-01-01 10:20 1037分类为[lucene]的文章 ... -
有关Lucene的问题(收藏)推荐
2010-12-30 21:02 1074有关Lucene的问题(1):为 ... -
Lucene 学习总结(收藏)推荐
2010-12-30 20:54 1527Lucene学习总结之一:全文检索的基本原理 ... -
基于Lucene的Compass 资源(收藏)
2010-12-29 18:29 11081.2、Compass相关网上资源 1、官方网站1: http ... -
Lucene 3.0.2索引文件官方文档(二)
2010-12-28 22:36 984Deletable File A writer dy ... -
Lucene 3.0.2索引文件官方文档(一)
2010-12-28 22:34 1425Apache Lucene - Index File ... -
Lucene 3.0 索引文件学习总结(收藏)
2010-12-28 22:28 910lucene学习1——词域信息 ... -
Lucene 字符编码问题
2010-12-27 20:29 963现在如果一个txt文件中包含了ANSI编码的文本文件和Uni ... -
Lucene 字符编码问题
2010-12-27 20:20 1002现在如果一个txt文件中包含了ANSI编码的文本文件和Unic ... -
Annotated Lucene(源码剖析中文版)
2010-12-25 22:52 1225Apache Lucene是一个高性能(high-pe ... -
Lucene 学习推荐博客
2010-12-25 22:42 1014深未来deepfuturelx http://deepfut ... -
Lucene3.0 初窥 总结(收藏)
2010-12-25 22:16 1774【Lucene3.0 初窥】全文检索的基本原理 ... -
转:基于lucene实现自己的推荐引擎
2010-12-17 17:05 1023采用基于数据挖掘的 ... -
加速 lucene 的搜索速度 ImproveSearchingSpeed(二)
2010-12-17 17:01 1006本文 为简单翻译,原文在:http://wiki.apac ... -
加速 lucene 索引建立速度 ImproveIndexingSpeed
2010-12-17 16:58 1037本文 只是简单的翻译,原文 在 http://wiki.a ... -
lucene 3.0 中的demo项目部署
2010-12-15 22:02 945转自:bjqincy 1 在myEclipise 建立 ... -
Lucene 3.0.2 源码 - final class Document
2010-12-14 22:33 858package org.apache.lucene.do ... -
Lucene 3.0.2 源码 - final class Field
2010-12-14 22:29 916package org.apache.lucene.do ... -
Lucene 3.0.2 源码 - abstract class AbstractField
2010-12-14 22:28 1011package org.apache.lucene.do ... -
Lucene 3.0.2 源码 - interface Fieldable
2010-12-14 22:28 1142package org.apache.lucene.do ...
相关推荐
它通过浅显的语言、大量的图注、丰富的代码示例,以及清晰的结构为读者呈现出作为优秀开源项目的Lucene 所体现的强大功能。全书共10章,分为两大部分。第1部分Lucene的核心,着重于Lucene的核心API介绍,并按照把...
本书深入浅出地介绍了lucene 一个开源的使用java语言编写的全文搜索引擎开发包 它通过浅显的语言 大量的图注 丰富的代码示例 以及清晰的结构为读者呈现出作为优秀开源项目的lucene所体现的强大功能 全书共10章 分为...
它通过浅显的语言、大量的图注、丰富的代码示例,以及清晰的结构为读者呈现出作为优秀开源项目的Lucene所体现的强大功能。全书共10章,分为两大部分。第1部分Lucene的核心,着重于Lucene的核心 API介绍,并按照把...
4.最新新闻系统已增加伪静态与全站生成静态功能。 5.支持上亿级数据的全文查询,时间在毫秒级,通常在30毫秒以下; 6.新闻系统与搜索引擎测试地址 垂直搜索 垂直搜索引擎和普通的网页搜索引擎的最大区别是对网页...
它通过浅显的语言、大量的图注、丰富的代码示例,以及清晰的结构为读者呈现出作为优秀开源项目的Lucene所体现的强大功能。全书共10章,分为两大部分。第1部分Lucene的核心,着重于Lucene的核心API介绍,并按照把...
Apache Lucene是用Java编写的高性能,功能齐全的文本搜索引擎库。 在线文件 此自述文件仅包含基本的安装说明。 有关更全面的文档,请访问: Lucene: : 用Gradle构建 基本步骤: 安装OpenJDK 11(或更高版本) ...
Lucene ++是流行的Java 库的C ++端口,Java 库是一种高性能,功能齐全的文本搜索引擎。 Lucene ++组件 liblucene ++库 liblucene ++-contrib库 lucene ++-tester(单元测试器) deletefiles(演示) 索引文件...
使用visual studio 开发的lucene.net...并实现了高亮功能。高亮上使用的是盘古分词的高亮算法。 有点小bug,在这个字段没有关键字的时候可能会不显示数据, 如果要是只看全文检索,可以自己去掉高亮,看一下检索结果。
Apache Lucene是用Java编写的高性能,功能齐全的文本搜索引擎库。 Apache Solr是使用Java编写并使用Apache Lucene的企业搜索平台。 主要功能包括全文搜索,索引复制和分片以及结果分面和突出显示。 在线文件 该...
本项目旨在通过Lucene库的强大功能,实现一个高效、精准的搜索引擎。该引擎能够对海量文档进行快速索引和检索,提供全文搜索、关键词高亮显示、多条件过滤等实用功能。同时,系统支持用户自定义搜索规则,满足不同...
先进、性能最好的、功能最全的搜索引擎库。 但是,Lucene只是一个库。想要使用它,你必须使用Java来作为开发语言并将其直接集成到你的应用中,更糟糕的是, Lucene非常复杂,你需要深入了解检索的相关知识来理解它是...
该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 一. 技术组成 技术栈:Java,使用 jdk1.8 即可 开发环境:IDEA /Ecplise 数据库:MySql (如果有的话) 二. 部署说明 1. Java...
该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:Vue/JSP/React/HTML+JS+CSS/ASP 后台框架代码:java/c/c++/...
Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎,无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。 但是,Lucene只是一个库。想要发挥其强大的作用,你需...
Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎,无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。 但是,Lucene只是一个库。想要发挥其强大的作用,你...
该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:Vue/JSP/React/HTML+JS+CSS/ASP 后台框架代码:java/c/c++/...
SSM框架学习宝典:入门、进阶、精通,全方位代码项目资 一、探索SSM的无限可能 SSM(Spring + Spring MVC + MyBatis)框架作为Java开发中的黄金组合,为开发者提供了强大的技术支持和丰富的功能。本系列资料将带您...
Lucene 可能是目前存在的,不论开源还是私有的,拥有最先进,高性能和全功能搜索引擎功能的库。但是 Lucene 仅仅只是一个库。为了利用它,你需要编写 Java 程序,并在你的 java 程序里面直接集成 Lucene 包。 更坏...
对于学生而言,它提供了从初步的构想到实际开发所需的全方位辅助材料,包括论文、设计文档和源代码等。 2. 包含内容: - 论文:涵盖了整个Java ASP Web系统的基础知识,设计意图、需求概述、系统结构与设计哲学、...