- 浏览: 134838 次
- 性别:
- 来自: 石家庄
文章分类
最新评论
-
shuzheng5201314:
如果不管这样的错误有影响吗?你这样貌似可行!
Proxool连接池在reload web容器时出现HouseKeeper的空指针异常 -
SpreadDiaries:
...
[转]常见数据库字段类型与java.sql.Types的对应 -
kevinhrw:
<bean
class="org.spri ...
用BeanNameAutoProxyCreator自动创建事务代理 -
hilliate:
第一步,把冰箱门打开第二步,把大象装进去第三步,把冰箱门关上呵 ...
Struts2中实现自定义标签很简单,主要分为3步:
写文章的时候,感觉比较难写的就是标题,有时候不知道起什么名字好,反正这里写的都是关于lucene的一些简单的实例,就随便起啦.
Lucene 其实很简单的,它最主要就是做两件事:建立索引和进行搜索
来看一些在lucene中使用的术语,这里并不打算作详细的介绍,只是点一下而已----因为这一个世界有一种好东西,叫搜索。
IndexWriter:lucene中最重要的的类之一,它主要是用来将文档加入索引,同时控制索引过程中的一些参数使用。
Analyzer:分析器,主要用于分析搜索引擎遇到的各种文本。常用的有StandardAnalyzer分析器,StopAnalyzer分析器,WhitespaceAnalyzer分析器等。
Directory:索引存放的位置;lucene提供了两种索引存放的位置,一种是磁盘,一种是内存。一般情况将索引放在磁盘上;相应地lucene提供了FSDirectory和RAMDirectory两个类。
Document:文档;Document相当于一个要进行索引的单元,任何可以想要被索引的文件都必须转化为Document对象才能进行索引。
Field:字段。
IndexSearcher:是lucene中最基本的检索工具,所有的检索都会用到IndexSearcher工具;
Query:查询,lucene中支持模糊查询,语义查询,短语查询,组合查询等等,如有TermQuery,BooleanQuery,RangeQuery,WildcardQuery等一些类。
QueryParser: 是一个解析用户输入的工具,可以通过扫描用户输入的字符串,生成Query对象。
Hits:在搜索完成之后,需要把搜索结果返回并显示给用户,只有这样才算是完成搜索的目的。在lucene中,搜索的结果的集合是用Hits类的实例来表示的。
上面作了一大堆名词解释,下面就看几个简单的实例吧:
1、简单的的StandardAnalyzer测试例子
Java代码
1.package lighter.iteye.com;
2.
3.import java.io.IOException;
4.import java.io.StringReader;
5.
6.import org.apache.lucene.analysis.Analyzer;
7.import org.apache.lucene.analysis.Token;
8.import org.apache.lucene.analysis.TokenStream;
9.import org.apache.lucene.analysis.standard.StandardAnalyzer;
10.
11.public class StandardAnalyzerTest
12.{
13. //构造函数,
14. public StandardAnalyzerTest()
15. {
16. }
17. public static void main(String[] args)
18. {
19. //生成一个StandardAnalyzer对象
20. Analyzer aAnalyzer = new StandardAnalyzer();
21. //测试字符串
22. StringReader sr = new StringReader("lighter javaeye com is the are on");
23. //生成TokenStream对象
24. TokenStream ts = aAnalyzer.tokenStream("name", sr);
25. try {
26. int i=0;
27. Token t = ts.next();
28. while(t!=null)
29. {
30. //辅助输出时显示行号
31. i++;
32. //输出处理后的字符
33. System.out.println("第"+i+"行:"+t.termText());
34. //取得下一个字符
35. t=ts.next();
36. }
37. } catch (IOException e) {
38. e.printStackTrace();
39. }
40. }
41.}
package lighter.iteye.com;
import java.io.IOException;
import java.io.StringReader;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.Token;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
public class StandardAnalyzerTest
{
//构造函数,
public StandardAnalyzerTest()
{
}
public static void main(String[] args)
{
//生成一个StandardAnalyzer对象
Analyzer aAnalyzer = new StandardAnalyzer();
//测试字符串
StringReader sr = new StringReader("lighter javaeye com is the are on");
//生成TokenStream对象
TokenStream ts = aAnalyzer.tokenStream("name", sr);
try {
int i=0;
Token t = ts.next();
while(t!=null)
{
//辅助输出时显示行号
i++;
//输出处理后的字符
System.out.println("第"+i+"行:"+t.termText());
//取得下一个字符
t=ts.next();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
显示结果:
引用
第1行:lighter
第2行:javaeye
第3行:com
提示一下:
StandardAnalyzer是lucene中内置的"标准分析器",可以做如下功能:
1、对原有句子按照空格进行了分词
2、所有的大写字母都可以能转换为小写的字母
3、可以去掉一些没有用处的单词,例如"is","the","are"等单词,也删除了所有的标点
查看一下结果与"new StringReader("lighter javaeye com is the are on")"作一个比较就清楚明了。
这里不对其API进行解释了,具体见lucene的官方文档。需要注意一点,这里的代码使用的是lucene2的API,与1.43版有一些明显的差别。
2、看另一个实例,简单地建立索引,进行搜索
Java代码
1.package lighter.iteye.com;
2.import org.apache.lucene.analysis.standard.StandardAnalyzer;
3.import org.apache.lucene.document.Document;
4.import org.apache.lucene.document.Field;
5.import org.apache.lucene.index.IndexWriter;
6.import org.apache.lucene.queryParser.QueryParser;
7.import org.apache.lucene.search.Hits;
8.import org.apache.lucene.search.IndexSearcher;
9.import org.apache.lucene.search.Query;
10.import org.apache.lucene.store.FSDirectory;
11.
12.public class FSDirectoryTest {
13.
14. //建立索引的路径
15. public static final String path = "c:\\index2";
16.
17. public static void main(String[] args) throws Exception {
18. Document doc1 = new Document();
19. doc1.add( new Field("name", "lighter javaeye com",Field.Store.YES,Field.Index.TOKENIZED));
20.
21. Document doc2 = new Document();
22. doc2.add(new Field("name", "lighter blog",Field.Store.YES,Field.Index.TOKENIZED));
23.
24. IndexWriter writer = new IndexWriter(FSDirectory.getDirectory(path, true), new StandardAnalyzer(), true);
25. writer.setMaxFieldLength(3);
26. writer.addDocument(doc1);
27. writer.setMaxFieldLength(3);
28. writer.addDocument(doc2);
29. writer.close();
30.
31. IndexSearcher searcher = new IndexSearcher(path);
32. Hits hits = null;
33. Query query = null;
34. QueryParser qp = new QueryParser("name",new StandardAnalyzer());
35.
36. query = qp.parse("lighter");
37. hits = searcher.search(query);
38. System.out.println("查找\"lighter\" 共" + hits.length() + "个结果");
39.
40. query = qp.parse("javaeye");
41. hits = searcher.search(query);
42. System.out.println("查找\"javaeye\" 共" + hits.length() + "个结果");
43.
44. }
45.
46.}
package lighter.iteye.com;
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.queryParser.QueryParser;
import org.apache.lucene.search.Hits;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.store.FSDirectory;
public class FSDirectoryTest {
//建立索引的路径
public static final String path = "c:\\index2";
public static void main(String[] args) throws Exception {
Document doc1 = new Document();
doc1.add( new Field("name", "lighter javaeye com",Field.Store.YES,Field.Index.TOKENIZED));
Document doc2 = new Document();
doc2.add(new Field("name", "lighter blog",Field.Store.YES,Field.Index.TOKENIZED));
IndexWriter writer = new IndexWriter(FSDirectory.getDirectory(path, true), new StandardAnalyzer(), true);
writer.setMaxFieldLength(3);
writer.addDocument(doc1);
writer.setMaxFieldLength(3);
writer.addDocument(doc2);
writer.close();
IndexSearcher searcher = new IndexSearcher(path);
Hits hits = null;
Query query = null;
QueryParser qp = new QueryParser("name",new StandardAnalyzer());
query = qp.parse("lighter");
hits = searcher.search(query);
System.out.println("查找\"lighter\" 共" + hits.length() + "个结果");
query = qp.parse("javaeye");
hits = searcher.search(query);
System.out.println("查找\"javaeye\" 共" + hits.length() + "个结果");
}
}
运行结果:
Java代码
1.查找"lighter" 共2个结果
2.查找"javaeye" 共1个结果
查找"lighter" 共2个结果
查找"javaeye" 共1个结果
很久没有看lucene了,这两三天又复习了一下,上一些代码都是前几个月写的,只是改动了一些字符串和包名显示。转载时请说明,文章来自:http://lighter.iteye.com。
如有什么错误的地方,恳请指出,谢谢。
Lucene 其实很简单的,它最主要就是做两件事:建立索引和进行搜索
来看一些在lucene中使用的术语,这里并不打算作详细的介绍,只是点一下而已----因为这一个世界有一种好东西,叫搜索。
IndexWriter:lucene中最重要的的类之一,它主要是用来将文档加入索引,同时控制索引过程中的一些参数使用。
Analyzer:分析器,主要用于分析搜索引擎遇到的各种文本。常用的有StandardAnalyzer分析器,StopAnalyzer分析器,WhitespaceAnalyzer分析器等。
Directory:索引存放的位置;lucene提供了两种索引存放的位置,一种是磁盘,一种是内存。一般情况将索引放在磁盘上;相应地lucene提供了FSDirectory和RAMDirectory两个类。
Document:文档;Document相当于一个要进行索引的单元,任何可以想要被索引的文件都必须转化为Document对象才能进行索引。
Field:字段。
IndexSearcher:是lucene中最基本的检索工具,所有的检索都会用到IndexSearcher工具;
Query:查询,lucene中支持模糊查询,语义查询,短语查询,组合查询等等,如有TermQuery,BooleanQuery,RangeQuery,WildcardQuery等一些类。
QueryParser: 是一个解析用户输入的工具,可以通过扫描用户输入的字符串,生成Query对象。
Hits:在搜索完成之后,需要把搜索结果返回并显示给用户,只有这样才算是完成搜索的目的。在lucene中,搜索的结果的集合是用Hits类的实例来表示的。
上面作了一大堆名词解释,下面就看几个简单的实例吧:
1、简单的的StandardAnalyzer测试例子
Java代码
1.package lighter.iteye.com;
2.
3.import java.io.IOException;
4.import java.io.StringReader;
5.
6.import org.apache.lucene.analysis.Analyzer;
7.import org.apache.lucene.analysis.Token;
8.import org.apache.lucene.analysis.TokenStream;
9.import org.apache.lucene.analysis.standard.StandardAnalyzer;
10.
11.public class StandardAnalyzerTest
12.{
13. //构造函数,
14. public StandardAnalyzerTest()
15. {
16. }
17. public static void main(String[] args)
18. {
19. //生成一个StandardAnalyzer对象
20. Analyzer aAnalyzer = new StandardAnalyzer();
21. //测试字符串
22. StringReader sr = new StringReader("lighter javaeye com is the are on");
23. //生成TokenStream对象
24. TokenStream ts = aAnalyzer.tokenStream("name", sr);
25. try {
26. int i=0;
27. Token t = ts.next();
28. while(t!=null)
29. {
30. //辅助输出时显示行号
31. i++;
32. //输出处理后的字符
33. System.out.println("第"+i+"行:"+t.termText());
34. //取得下一个字符
35. t=ts.next();
36. }
37. } catch (IOException e) {
38. e.printStackTrace();
39. }
40. }
41.}
package lighter.iteye.com;
import java.io.IOException;
import java.io.StringReader;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.Token;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
public class StandardAnalyzerTest
{
//构造函数,
public StandardAnalyzerTest()
{
}
public static void main(String[] args)
{
//生成一个StandardAnalyzer对象
Analyzer aAnalyzer = new StandardAnalyzer();
//测试字符串
StringReader sr = new StringReader("lighter javaeye com is the are on");
//生成TokenStream对象
TokenStream ts = aAnalyzer.tokenStream("name", sr);
try {
int i=0;
Token t = ts.next();
while(t!=null)
{
//辅助输出时显示行号
i++;
//输出处理后的字符
System.out.println("第"+i+"行:"+t.termText());
//取得下一个字符
t=ts.next();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
显示结果:
引用
第1行:lighter
第2行:javaeye
第3行:com
提示一下:
StandardAnalyzer是lucene中内置的"标准分析器",可以做如下功能:
1、对原有句子按照空格进行了分词
2、所有的大写字母都可以能转换为小写的字母
3、可以去掉一些没有用处的单词,例如"is","the","are"等单词,也删除了所有的标点
查看一下结果与"new StringReader("lighter javaeye com is the are on")"作一个比较就清楚明了。
这里不对其API进行解释了,具体见lucene的官方文档。需要注意一点,这里的代码使用的是lucene2的API,与1.43版有一些明显的差别。
2、看另一个实例,简单地建立索引,进行搜索
Java代码
1.package lighter.iteye.com;
2.import org.apache.lucene.analysis.standard.StandardAnalyzer;
3.import org.apache.lucene.document.Document;
4.import org.apache.lucene.document.Field;
5.import org.apache.lucene.index.IndexWriter;
6.import org.apache.lucene.queryParser.QueryParser;
7.import org.apache.lucene.search.Hits;
8.import org.apache.lucene.search.IndexSearcher;
9.import org.apache.lucene.search.Query;
10.import org.apache.lucene.store.FSDirectory;
11.
12.public class FSDirectoryTest {
13.
14. //建立索引的路径
15. public static final String path = "c:\\index2";
16.
17. public static void main(String[] args) throws Exception {
18. Document doc1 = new Document();
19. doc1.add( new Field("name", "lighter javaeye com",Field.Store.YES,Field.Index.TOKENIZED));
20.
21. Document doc2 = new Document();
22. doc2.add(new Field("name", "lighter blog",Field.Store.YES,Field.Index.TOKENIZED));
23.
24. IndexWriter writer = new IndexWriter(FSDirectory.getDirectory(path, true), new StandardAnalyzer(), true);
25. writer.setMaxFieldLength(3);
26. writer.addDocument(doc1);
27. writer.setMaxFieldLength(3);
28. writer.addDocument(doc2);
29. writer.close();
30.
31. IndexSearcher searcher = new IndexSearcher(path);
32. Hits hits = null;
33. Query query = null;
34. QueryParser qp = new QueryParser("name",new StandardAnalyzer());
35.
36. query = qp.parse("lighter");
37. hits = searcher.search(query);
38. System.out.println("查找\"lighter\" 共" + hits.length() + "个结果");
39.
40. query = qp.parse("javaeye");
41. hits = searcher.search(query);
42. System.out.println("查找\"javaeye\" 共" + hits.length() + "个结果");
43.
44. }
45.
46.}
package lighter.iteye.com;
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.queryParser.QueryParser;
import org.apache.lucene.search.Hits;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.store.FSDirectory;
public class FSDirectoryTest {
//建立索引的路径
public static final String path = "c:\\index2";
public static void main(String[] args) throws Exception {
Document doc1 = new Document();
doc1.add( new Field("name", "lighter javaeye com",Field.Store.YES,Field.Index.TOKENIZED));
Document doc2 = new Document();
doc2.add(new Field("name", "lighter blog",Field.Store.YES,Field.Index.TOKENIZED));
IndexWriter writer = new IndexWriter(FSDirectory.getDirectory(path, true), new StandardAnalyzer(), true);
writer.setMaxFieldLength(3);
writer.addDocument(doc1);
writer.setMaxFieldLength(3);
writer.addDocument(doc2);
writer.close();
IndexSearcher searcher = new IndexSearcher(path);
Hits hits = null;
Query query = null;
QueryParser qp = new QueryParser("name",new StandardAnalyzer());
query = qp.parse("lighter");
hits = searcher.search(query);
System.out.println("查找\"lighter\" 共" + hits.length() + "个结果");
query = qp.parse("javaeye");
hits = searcher.search(query);
System.out.println("查找\"javaeye\" 共" + hits.length() + "个结果");
}
}
运行结果:
Java代码
1.查找"lighter" 共2个结果
2.查找"javaeye" 共1个结果
查找"lighter" 共2个结果
查找"javaeye" 共1个结果
很久没有看lucene了,这两三天又复习了一下,上一些代码都是前几个月写的,只是改动了一些字符串和包名显示。转载时请说明,文章来自:http://lighter.iteye.com。
如有什么错误的地方,恳请指出,谢谢。
发表评论
-
truelicense使用手册
2015-04-25 09:47 39201.生成truelicense的maven项目 mvn a ... -
Java实现ftp上传文件、文件夹
2012-04-06 11:06 841import java.io.File; import ... -
Lucene入门级笔记六 -- 优化 .
2011-10-24 22:54 0Lucene 优化 1. 让程序中只有一个 Inde ... -
Lucene入门级笔记五 -- 分词器,使用中文分词器,扩展词库,停用词 .
2011-10-24 22:53 14071. 常见的中文分词器有 ... -
Lucene(全文检索技术)入门级笔记整之一——第一个Lucene程序 .
2011-10-24 22:50 1242Lucene(全文检索技术)入门级笔记整之一——第一个Lu ... -
Lucene入门级笔记二 -- 索引库的CRUD API 演示 .
2011-10-24 22:44 1081Lucene 对索引库的增删改查操作的 API 演示 没什么 ... -
Lucene入门级笔记三 -- 给关键词添加高亮效果
2011-10-24 22:43 17231. 使用高亮器。 2. ... -
Lucene入门级笔记四 -- 对检索结果排序 .
2011-10-24 22:40 1553对检索结果排序 1. 某些场合需要我们自定义搜索结果的 ... -
java获取各种日期
2011-07-14 16:47 828package com.cjy.test; impo ... -
tomcat无法运行两个struts2项目。解决方式
2011-06-15 14:22 1028提示异常: 严重: Exception starting f ... -
APACHE 2.2.9+TOMCAT6.0.18配置负载均衡
2010-10-21 23:14 1462目标: 使用 apache 和 tomcat 配置一个可以应 ... -
Request用法
2010-09-08 11:13 1182Request [JSP] JSP中的隐藏对象 -- ... -
div错位/解决IE6、IE7、IE8样式不兼容问题
2010-01-13 10:07 2299IE6里DIV错位的问题 ... -
主题:J2EE常用工具类汇总
2009-10-18 18:24 853J2EE常用工具类汇总 J2EE ... -
dreamweaver cs4 许可证过期的解决办法
2009-09-24 13:43 1854dreamweaver cs4 许可证过期的解决办法 200 ... -
lucene四种索引方式详解
2009-09-16 21:45 11711。今天研究了一下lucene,对于初学者来说,有一个地方以前 ... -
时间处理类
2009-07-24 10:14 769/** * 时间处理类 */ ... -
apache POI 读取 Word
2009-07-24 10:13 1314import java.io.File; import ... -
apache POI 读取 Excel
2009-07-24 10:12 1225import java.io.File; import ja ... -
自动得到汉语拼音
2009-07-24 10:11 960import java.util.Iterator; imp ...
相关推荐
<groupId>org.apache.lucene</groupId> <artifactId>lucene-core</artifactId> <version>3.5.0</version> </dependency> <dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-analyzers-...
《Lucene简单代码实例解析》 Lucene是一个高性能、全文本搜索库,由Apache软件基金会开发,被广泛应用于各种搜索引擎的构建。它提供了一个简单的API,使得开发者可以方便地在自己的应用程序中集成全文检索功能。...
以上就是 Lucene 的一个简单应用实例,它展示了如何使用 Lucene 创建索引和执行查询。实际项目中,你可能需要处理更复杂的文本分析、多字段查询、排序、分页等功能。了解 Lucene 提供的各种组件和类,如 Analyzer、...
<groupId>org.apache.lucene</groupId> <artifactId>lucene-core</artifactId> <version>8.5.1</version> </dependency> <!-- 其他相关模块如-analyzers-common, -queryparser等根据需求添加 --> ``` 三、Lucene...
从给定的文件信息中,我们可以提取出关于Apache Lucene的基本使用和实例的详细知识点,以下是对这些知识点的深入解析: ### Lucene简介 Apache Lucene是一个高性能、全功能的文本搜索引擎库,由Java编写,提供了对...
**Lucene索引器实例详解** Lucene是一个高性能、全文本搜索库,由Apache软件基金会开发,被广泛应用于各种搜索引擎的构建。它提供了一个高级的、灵活的、可扩展的接口,使得开发者能够轻松地在应用程序中实现全文...
<artifactId>jai-imageio-core</artifactId> <version>1.4.0</version> </dependency> <dependency> <groupId>com.github.jai-imageio</groupId> <artifactId>jai-imageio-jpeg2000</artifactId> <version>...
**Lucene 搜索实例** Apache Lucene 是一个高性能、全文本搜索引擎库,它为开发者提供了在各种应用程序中实现全文检索的工具集。Lucene 并不是一个完整的应用,而是一个 Java 类库,可以被其他 Java 应用程序所使用...
二、Lucene实例操作流程 1. 创建索引(Indexing):首先,我们需要创建一个索引Writer,然后添加文档到索引中。每个文档包含多个字段,每个字段都有其特定的属性,如是否可搜索、是否存储原始内容等。 ```java ...
《Lucene使用代码实例之搜索文档》 Lucene是一个高性能、全文检索库,它提供了强大的文本分析和索引功能,广泛应用于搜索引擎开发和其他需要高效文本处理的场景。本篇文章主要面向初学者,通过实例详细解释如何使用...
Compass是一个基于Apache Lucene的全文搜索引擎库,它提供了一种简单的方式来连接到应用程序的数据源,并将其索引到Lucene中。Compass的主要优势在于它能够透明地集成到现有应用中,使得开发者无需对原有代码进行大...
接着,选择合适的Formatter和Encoder,Formatter决定了高亮显示的具体样式,如使用HTML标签 `<b>` 或 `<span>`,而Encoder则处理特殊字符,避免在HTML输出时出现问题。最后,使用Highlighter的highlight方法,传入...
《Lucene 4.8 实例解析》 Lucene 是一个高性能、全文本搜索库,由 Apache 软件基金会开发。它提供了完整的搜索功能,包括分词、索引、查询解析、排序等,被广泛应用于各种信息检索系统。本文将深入探讨 Lucene 4.8 ...
<artifactId>spring-boot-starter-data-lucene</artifactId> </dependency> ``` 三、创建索引仓库 在SpringBoot应用中,我们需要定义一个`Directory`实例来保存索引,可以选择内存或文件系统作为存储方式。例如,...
通过实例,我们可以创建一个简单的索引器,将文本文件或数据库内容导入Lucene索引,然后编写一个搜索引擎来查询这些内容。这通常涉及以下步骤: - 创建索引:定义Document结构,使用Analyzer处理Field,通过...
经典的Lucene实例代码及详细解析以及Lucene结构流程介绍 Lucene是一个功能强大且灵活的开源搜索引擎库,它提供了一个简单易用的API,允许开发者快速构建搜索应用程序。下面将对Lucene的实例代码和结构流程进行详细...
这个“lucene小实例文件检索”旨在为初学者提供一个简单但完整的文件检索功能实现,帮助理解Lucene的基本工作原理和使用方法。 在Lucene中,文件检索主要涉及以下几个核心概念: 1. **索引(Index)**:在Lucene中...
<groupId>org.apache.lucene</groupId> <artifactId>lucene-core</artifactId> <version>8.10.1</version> <!-- 使用最新版本 --> </dependency> ``` 接下来,我们创建一个索引。在Lucene中,索引是通过对文档...
public static List<T> GetByIds<T>(List<long> ids) where T : ESBase, new() ``` - **目的**:根据多个ID获取Elasticsearch中的文档列表。 - **参数**: - `List<long> ids`:包含多个文档ID的列表。 - **返回值...