`
txf2004
  • 浏览: 7039952 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论
阅读更多

版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://dreamhead.blogbus.com/logs/13442877.html

Lucene是什么?下面是官方回答。

Apache Lucene is a high-performance, full-featured text search engine library written entirely in Java.

简而言之,它是用来做搜索的库。提及搜索,我们的思绪就会情不自禁飞到串匹配上。没错,串匹配确实是一种搜索,但对于不同的应用,搜索的方法不一样,对于在一篇文档中进行搜索这种小规模应用而言,串匹配足够了,而Lucene为我们向大规模搜索铺上了一条大道。大规模?是不是想到了搜索引擎,事实上,Lucene就是被很多人用来构建搜索引擎。

关于搜索引擎的实现,很多人或多或少的听说过一些,比如网络爬虫,比如分布式的架构,比如PageRank。抛开其它其它复杂的部分,最关键的步骤便是建立索引,然后进行搜索。不妨让我们Lucene是如何实现这最关键的部分。

import java.io.File;
import java.io.FileReader;

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;

public class Indexer {
public static void main(String[] args) throws Exception {
File indexDir = new File("index");
File dataDir = new File("data");

IndexWriter indexWriter = null;
try {
indexWriter = new IndexWriter(indexDir, new StandardAnalyzer(), true);
for (File file : dataDir.listFiles()) {
if (file.isFile() && file.getName().endsWith(".txt")) {
Document document = new Document();
Field pathField = new Field("path", file.getCanonicalPath(),
Field.Store.YES, Field.Index.TOKENIZED);
document.add(pathField);
Field contentField = new Field("contents", new FileReader(file));
document.add(contentField);
indexWriter.addDocument(document);
}
}
indexWriter.optimize();
} finally {
if (indexWriter != null) {
indexWriter.close();
}
}
}
}

这段代码很容易理解,遍历数据目录下的文本文件,为每个文件生成索引。

这里有一个Document的概念,它在Lucene表示的是索引和搜索的单位,也就是说,建立索引,是以Document为单位的,搜索也是以Document为单位的。Document中有一堆的Field,我们可以把它们理解为Document中一个一个小节。有了Field,我们可以为Document添加一些属性,比如这里,我们就添加了路径(path)和内容(content)两个属性。这样,搜索之后,我们可以利用这些属性提供更多的信息,比如,告诉别人搜索的词出现在哪个文档中。

上面的代码中,我们可以清楚看到,建立Document,并向其中插入Field的过程。有了Document,我们就可以把它借助IndexWriter将它们写入索引中,至于最后的optimize,显然是为了让搜索更有效率而存在的。

有了索引,那就该进行下一步的工作,搜索。

import org.apache.lucene.document.Document;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.Hits;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.TermQuery;

public class Searcher {
public static void main(String[] args) throws Exception {
String type = "contents";
String key = "game";
String path = "index";

IndexSearcher searcher = new IndexSearcher(path);
Term t = new Term(type, key);
Query query = new TermQuery(t);

Hits hits = searcher.search(query);
for(int i = 0; i < hits.length(); i++){
Document document = hits.doc(i);
System.out.println("File: " + document.get("path"));
}
}
}

IndexSearcher是用来在索引中进行搜索主要帮手,前提是我们要告诉它到索引在哪。Term表示文本中的一个词,它说明了我们要在哪个Field(type)中找什么(key)。然后,我们用Term做成一个Query,表示我们要进行搜索了。做好准备,接下来,就是搜索了。搜索的结果叫做Hits。遍历这个Hits,便可以将搜索结果一一展示出来。如前面所说,这里利用路径这个属性报告搜索的结果。

有了Lucene做基础,能做的事就很多了,比如搭建一个搜索引擎。事实上,已经有了这样的开源项目,比如与Lucene同出一门的Nutch,比如比Nutch年纪更大的Compass

分享到:
评论

相关推荐

    lucene-6.5.1

    doc.add(new TextField("content", "Hello Lucene!", Field.Store.YES)); writer.addDocument(doc); writer.commit(); writer.close(); // 搜索文档 DirectoryReader reader = DirectoryReader.open...

    Lucene之Helloworld

    《Lucene之HelloWorld》 在信息技术领域,搜索引擎是一个不可或缺的部分,而Apache Lucene作为一款高性能、全文本搜索库,为开发者提供了强大的文本检索能力。本文将深入探讨如何使用Lucene进行基本操作,通过...

    Lucene-Demo.rar Lucene分词的demo

    例如,一个英文分词器可能会将句子"Hello World"拆分为"Hello"和"World"两个术语。 在导入这个Demo项目后,开发者可以查看和学习如何实例化分词器、创建索引以及执行搜索。分词器的配置是灵活的,可以根据需求选择...

    Lucene常用的Demo

    本篇文章将深入探讨Lucene的几个常见示例,包括`LuceneDemo`、`LuceneZJ`、`Lucene_HelloWorld`,帮助初学者快速理解Lucene的基本操作。 1. **Lucene_HelloWorld** 这个示例是入门Lucene的首选,它展示了如何创建...

    使用Lucene.net进行全文搜索

    例如,英文Analyzer可能会将“hello world”拆分为“hello”和“world”。 - **创建Document**: 模拟数据库中的记录,Document包含字段(Field),如标题、正文等,每个字段可以指定是否被索引和存储。 - **添加...

    lucene实战源码.rar

    《Lucene实战源码》是一本深入探讨Apache Lucene搜索引擎库的书籍,其配套的光盘代码包含了书中各个章节的示例和实验项目。Lucene是Java开发的全文搜索引擎库,广泛应用于各种信息检索和文本分析场景。通过研究这...

    全文搜索Lucene&ElasticSearch-新版.doc

    入门Lucene时,可以创建一个简单的HelloWorld程序,使用Lucene提供的API如IndexWriter进行索引的创建和维护,以及IndexSearcher进行索引的搜索。在Java环境中,需要引入相关的Lucene库,如lucene-analyzers-common、...

    Annotated Lucene 中文版 Lucene源码剖析

    - **Hello World!** - 创建一个简单的索引,并进行基本的查询操作,这是入门Lucene的第一步。 - **Lucene Roadmap**: - 了解Lucene的发展历程及其未来规划对于开发者来说非常重要。 #### 索引文件结构 - **...

    lucene:lucene构建索引,从HelloWorld到项目具体使用

    lucene构建索引,从HelloWorld到项目具体使用 ====================项目一:=================================== qianjun.lucene.first ====================项目二:=================================== qianjun....

    lucene(HelloWord)

    《Lucene:初识搜索引擎库的“Hello World”》 Lucene,作为Apache软件基金会的顶级项目,是一款高性能、全文本检索引擎库,被广泛应用于各类搜索引擎和信息检索系统中。它提供了完整的搜索功能,包括索引、查询、...

    lucene-入门

    要使用 Lucene 进行一个简单的搜索应用(Hello World),首先需要创建一个索引库,并将一些文档索引到这个库中。然后,可以通过构建查询来搜索这个索引库中的内容。具体的步骤如下: 1. **创建一个 IndexWriter ...

    lucene学习,lucene对txt,pdf,html格式的学习

    在给定的代码中,`Index`方法创建了一个包含100条记录的索引,每条记录的`name`字段从`name1`到`name100`,`value`字段都为`"Hello, World!"`。然后,`Search`方法使用`QueryParser`解析查询`name*`,并打印出所有...

    lucene全文检索-javademo.rar

    hello.java 是对文档的内容检索 Hello1.java是对一组数据做检索 IncrementIndex 是对数据库表里数据进行创建索引、添加增量索引 TeacherIndex 是采用ssh框架的模式对数据库里面的表创建索引、添加增量索引、检索...

    lucene项目代码

    项目描述中的“Helloworld”通常代表入门级别的示例,可能包含以下步骤: 1. **创建索引**:首先,你需要创建一个索引,将数据(例如,文件内容)转换为Lucene可以理解和查询的格式。这涉及到读取文件,创建文档...

    Lucene演示

    这个"Lucene演示"可能是为了帮助初学者理解和使用Lucene进行基本操作的一个实例,例如"HelloWorld"式的简单演示。 在开始深入Lucene之前,我们先理解一下全文搜索引擎的基本概念。全文搜索引擎不同于传统的数据库...

    Lucene4.X实战类baidu搜索的大型文档海量搜索系统-12.Lucene搜索深入实战进阶2 共9页.pptx

    短语查询是用双引号包围的一组词,例如:"Hello dolly"。分析器在处理查询时会将输入的文本转化为Term。 - **布尔操作符**: - **OR**:默认操作符,表示至少有一个Term匹配即可。 - **AND**:所有Term必须匹配。...

    lucene-parser

    Lucene解析器 一个最小的节点模块,提供将fetextquery parse为lucene syntax实用方法。 安装 npm install lucene-parser --save 用法 var lucene_parser = require ( 'lucene-parser' ) lucene_parser . ...

    lunece入门之HelloWorld

    《Lucene入门之HelloWorld》 Lucene是一个高性能、全文本搜索库,由Apache软件基金会开发并维护。它提供了一个简单但功能强大的API,用于在各种应用中实现文本的索引和搜索。这篇博文将带你走进Lucene的世界,通过...

    lucene相关文档

    - **查询词**:单个词或词组,词组用双引号包围,如 "hello world"。 - **查询域**:指定查询的字段,如 `title:"Do it right"`。 - **通配符查询**:使用 `?` 表示一个任意字符,`*` 表示多个任意字符,但它们不...

    lucence入门HelloWorld

    **Lucene 入门教程** Lucene 是一个高性能、全文本搜索库,由Apache软件基金会开发,被广泛应用于各种搜索引擎的构建。它提供了一个高级的、可扩展的、完全免费的搜索程序开发框架,使开发者能够轻松地在自己的应用...

Global site tag (gtag.js) - Google Analytics