`

lucene简单实例<二>

    博客分类:
  • Java
阅读更多
写文章的时候,感觉比较难写的就是标题,有时候不知道起什么名字好,反正这里写的都是关于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+中文IK分词器 例子

    &lt;groupId&gt;org.apache.lucene&lt;/groupId&gt; &lt;artifactId&gt;lucene-core&lt;/artifactId&gt; &lt;version&gt;3.5.0&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.apache.lucene&lt;/groupId&gt; &lt;artifactId&gt;lucene-analyzers-...

    lucene简单代码列子

    《Lucene简单代码实例解析》 Lucene是一个高性能、全文本搜索库,由Apache软件基金会开发,被广泛应用于各种搜索引擎的构建。它提供了一个简单的API,使得开发者可以方便地在自己的应用程序中集成全文检索功能。...

    lucene 简单例子

    以上就是 Lucene 的一个简单应用实例,它展示了如何使用 Lucene 创建索引和执行查询。实际项目中,你可能需要处理更复杂的文本分析、多字段查询、排序、分页等功能。了解 Lucene 提供的各种组件和类,如 Analyzer、...

    最新版windows lucene-8.5.1.zip

    &lt;groupId&gt;org.apache.lucene&lt;/groupId&gt; &lt;artifactId&gt;lucene-core&lt;/artifactId&gt; &lt;version&gt;8.5.1&lt;/version&gt; &lt;/dependency&gt; &lt;!-- 其他相关模块如-analyzers-common, -queryparser等根据需求添加 --&gt; ``` 三、Lucene...

    Lucene简单实例记录

    从给定的文件信息中,我们可以提取出关于Apache Lucene的基本使用和实例的详细知识点,以下是对这些知识点的深入解析: ### Lucene简介 Apache Lucene是一个高性能、全功能的文本搜索引擎库,由Java编写,提供了对...

    Lucene索引器实例

    **Lucene索引器实例详解** Lucene是一个高性能、全文本搜索库,由Apache软件基金会开发,被广泛应用于各种搜索引擎的构建。它提供了一个高级的、灵活的、可扩展的接口,使得开发者能够轻松地在应用程序中实现全文...

    基于Lire库搜索相似图片源码

    &lt;artifactId&gt;jai-imageio-core&lt;/artifactId&gt; &lt;version&gt;1.4.0&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;com.github.jai-imageio&lt;/groupId&gt; &lt;artifactId&gt;jai-imageio-jpeg2000&lt;/artifactId&gt; &lt;version&gt;...

    Lucene搜索实例

    **Lucene 搜索实例** Apache Lucene 是一个高性能、全文本搜索引擎库,它为开发者提供了在各种应用程序中实现全文检索的工具集。Lucene 并不是一个完整的应用,而是一个 Java 类库,可以被其他 Java 应用程序所使用...

    lucene实例lucene实例

    二、Lucene实例操作流程 1. 创建索引(Indexing):首先,我们需要创建一个索引Writer,然后添加文档到索引中。每个文档包含多个字段,每个字段都有其特定的属性,如是否可搜索、是否存储原始内容等。 ```java ...

    Lucene使用代码实例之搜索文档

    《Lucene使用代码实例之搜索文档》 Lucene是一个高性能、全文检索库,它提供了强大的文本分析和索引功能,广泛应用于搜索引擎开发和其他需要高效文本处理的场景。本篇文章主要面向初学者,通过实例详细解释如何使用...

    Compass+ lucene 通用代码(脱离数据库)

    Compass是一个基于Apache Lucene的全文搜索引擎库,它提供了一种简单的方式来连接到应用程序的数据源,并将其索引到Lucene中。Compass的主要优势在于它能够透明地集成到现有应用中,使得开发者无需对原有代码进行大...

    Lucene+HighLighter高亮显示实例

    接着,选择合适的Formatter和Encoder,Formatter决定了高亮显示的具体样式,如使用HTML标签 `&lt;b&gt;` 或 `&lt;span&gt;`,而Encoder则处理特殊字符,避免在HTML输出时出现问题。最后,使用Highlighter的highlight方法,传入...

    lucene 4.8 实例

    《Lucene 4.8 实例解析》 Lucene 是一个高性能、全文本搜索库,由 Apache 软件基金会开发。它提供了完整的搜索功能,包括分词、索引、查询解析、排序等,被广泛应用于各种信息检索系统。本文将深入探讨 Lucene 4.8 ...

    springboot-lucene.zip

    &lt;artifactId&gt;spring-boot-starter-data-lucene&lt;/artifactId&gt; &lt;/dependency&gt; ``` 三、创建索引仓库 在SpringBoot应用中,我们需要定义一个`Directory`实例来保存索引,可以选择内存或文件系统作为存储方式。例如,...

    Java搜索工具——Lucene实例总结(一)

    通过实例,我们可以创建一个简单的索引器,将文本文件或数据库内容导入Lucene索引,然后编写一个搜索引擎来查询这些内容。这通常涉及以下步骤: - 创建索引:定义Document结构,使用Analyzer处理Field,通过...

    经典的lucene实例代码及详细解析以及lucene结构流程介绍

    经典的Lucene实例代码及详细解析以及Lucene结构流程介绍 Lucene是一个功能强大且灵活的开源搜索引擎库,它提供了一个简单易用的API,允许开发者快速构建搜索应用程序。下面将对Lucene的实例代码和结构流程进行详细...

    lucene小实例文件检索

    这个“lucene小实例文件检索”旨在为初学者提供一个简单但完整的文件检索功能实现,帮助理解Lucene的基本工作原理和使用方法。 在Lucene中,文件检索主要涉及以下几个核心概念: 1. **索引(Index)**:在Lucene中...

    Lucene之Helloworld

    &lt;groupId&gt;org.apache.lucene&lt;/groupId&gt; &lt;artifactId&gt;lucene-core&lt;/artifactId&gt; &lt;version&gt;8.10.1&lt;/version&gt; &lt;!-- 使用最新版本 --&gt; &lt;/dependency&gt; ``` 接下来,我们创建一个索引。在Lucene中,索引是通过对文档...

    Elasticseach--C#客户端-NEST-简单封装

    public static List&lt;T&gt; GetByIds&lt;T&gt;(List&lt;long&gt; ids) where T : ESBase, new() ``` - **目的**:根据多个ID获取Elasticsearch中的文档列表。 - **参数**: - `List&lt;long&gt; ids`:包含多个文档ID的列表。 - **返回值...

Global site tag (gtag.js) - Google Analytics