<?xml version="1.0" encoding="UTF-8"?><!-- generator="WordPress/2.8.4" -->
<rss version="0.92">
<channel>
	<title>Lucene.net 教程</title>
	<link>http://www.xeie.cn</link>
	<description>Lucene教程</description>
	<lastBuildDate>Tue, 26 Jan 2010 03:54:34 +0000</lastBuildDate>
	<docs>http://backend.userland.com/rss092</docs>
	<language>en</language>
	
	<item>
		<title>lucene乱码解决方案</title>
		<description>用paoding中文分词,先建立词典
vi /etc/profile
export PAODING_DIC_HOME=/data/paoding/dic
将paoding的dic目录里的内容copy到 /data/paoding/dic
windows设置见手册

另外导入lucene/contrib/memory下的包lucene-memory到regain/lib中.再编译.

server版本中有个问题需要修改.如果出现乱码可尝试将
src/net/sf/regain/search/SearchToolkit.java
修改为下面的
queryString = query.toString().trim();

//add by robin
try {
queryString = new String(queryString.getBytes(”iso-8859-1″),”UTF-8″);
} catch (Exception e) {
}
request.setContextAttribute(SEARCH_QUERY_CONTEXT_ATTR_NAME, queryString);
} </description>
		<link>http://www.xeie.cn/index.php/lucene%e4%b9%b1%e7%a0%81/lucene%e4%b9%b1%e7%a0%81%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88/</link>
			</item>
	<item>
		<title>lucene搜索引擎memoryIndwx错误</title>
		<description>是因为highlight这个类中用到了memoryIndex这个类，而默认的classpath下没有放入这个jar文件，所以会报找不到类的异常

JVM在启动的时候会自动设置Heap size的值，其初始空间(即-Xms)是物理内存的1/64，最大空间(-Xmx)是物理内存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置。
例如：java -jar -Xmn16m -Xms64m -Xmx128m MyApp.jar </description>
		<link>http://www.xeie.cn/index.php/lucene-memoryindwx/lucene%e6%90%9c%e7%b4%a2%e5%bc%95%e6%93%8ememoryindwx%e9%94%99%e8%af%af/</link>
			</item>
	<item>
		<title>regain 安装教程</title>
		<description>一、修改增加中文分词模块为 Paoding-analysis

非常简单，只需要修改一个源码文件。

源代码文件（以下都用下划线表示）：src\net\sf\regainRegainToolKit.java

import net.paoding.analysis.analyzer.PaodingAnalyzer;
import org.apache.lucene.analysis.cn.ChineseAnalyzer;

public static Analyzer createAnalyzer(String analyzerType,
String[] stopWordList, String[] exclusionList, String[] untokenizedFieldNames)
throws RegainException

if (analyzerType.equalsIgnoreCase("english")) {
analyzerClassName = StandardAnalyzer.class.getName();
} else if (analyzerType.equalsIgnoreCase("german")) {
analyzerClassName = GermanAnalyzer.class.getName();
} else if (analyzerType.equalsIgnoreCase("chinese")){
analyzerClassName = ChineseAnalyzer.class.getName();//Add by ping.
}  else if (analyzerType.equalsIgnoreCase("paoding")){
analyzerClassName = PaodingAnalyzer.class.getName();//Add by ping.
}

源码修改只涉及以上一个文件，但是要完整编译和最终运成功，还需要其他修改。
主要包括：
1.修改ant的编译配置文件build.xml，
2.拷贝paoding-analysis.jar到lib目录。

build.xml修改如下：
[这里摘录修改的片段，修改增加部分为粗体]
...
&#60;target name="runtime-desktop" depends="prepare-once, runtime-desktop-fast"&#62;
&#60;echo message="Creating the jars ..." /&#62;
&#60;fileset id="desktop-common-jars" dir="build/included-lib-classes/common"&#62;
&#60;include name="org/apache/lucene/**"/&#62;
&#60;include name="org/apache/log4j/**"/&#62;
&#60;include ...</description>
		<link>http://www.xeie.cn/index.php/regain-%e5%ae%89%e8%a3%85/regain-%e5%ae%89%e8%a3%85%e6%95%99%e7%a8%8b/</link>
			</item>
	<item>
		<title>Regain增加中文Paoding分词模块</title>
		<description>一、修改增加中文分词模块为 Paoding-analysis
非常简单，只需要修改一个源码文件。
源代码文件（以下都用下划线表示）：src\net\sf\regainRegainToolKit.java

import net.paoding.analysis.analyzer.PaodingAnalyzer;
import org.apache.lucene.analysis.cn.ChineseAnalyzer;
public static Analyzer createAnalyzer(String analyzerType,
String[] stopWordList, String[] exclusionList, String[] untokenizedFieldNames)
throws RegainException
if (analyzerType.equalsIgnoreCase("english")) {
analyzerClassName = StandardAnalyzer.class.getName();
} else if (analyzerType.equalsIgnoreCase("german")) {
analyzerClassName = GermanAnalyzer.class.getName();
} else if (analyzerType.equalsIgnoreCase("chinese")){
analyzerClassName = ChineseAnalyzer.class.getName();//Add by ping.
}  else if (analyzerType.equalsIgnoreCase("paoding")){
analyzerClassName = PaodingAnalyzer.class.getName();//Add by ping.
} 
源码修改只涉及以上一个文件，但是要完整编译和最终运成功，还需要其他修改。
主要包括：
1.修改ant的编译配置文件build.xml，
2.拷贝paoding-analysis.jar到lib目录。
build.xml修改如下：
[这里摘录修改的片段，修改增加部分为粗体]
...
&#60;target name="runtime-desktop" depends="prepare-once, runtime-desktop-fast"&#62;
&#60;echo message="Creating the jars ..." /&#62;
&#60;fileset id="desktop-common-jars" dir="build/included-lib-classes/common"&#62;
&#60;include name="org/apache/lucene/**"/&#62;
&#60;include ...</description>
		<link>http://www.xeie.cn/index.php/regain-paoding/regain%e5%a2%9e%e5%8a%a0%e4%b8%ad%e6%96%87paoding%e5%88%86%e8%af%8d%e6%a8%a1%e5%9d%97/</link>
			</item>
	<item>
		<title>regain安装配置简介</title>
		<description>一、Regain简要介绍
regain是一款与Web搜索引擎类似的桌面搜索引擎系统，其不同之处在于regain不是对Internet内容的搜索，而是针对自己的文档或文件的搜索，使用regain可以轻松地在几秒内完成大量数据（许多个G）的搜索。Regain采用了Lucene的搜索语法，因此支持多种查询方式，支持多索引的搜索及基于文件类型的高级搜索，并且能实现URL重写及文件到HTTP的桥接，并且对中文也提供了较好的支持。

Regain提供了两种版本：桌面搜索及服务器搜索。桌面搜索提供了对普通桌面计算机的文档与局域网环境下的网页的快速搜索。服务器版本主要安装在Web服务器上，为网站及局域网环境下的文件服务器进行搜索。

Regain使用Java编写，因此可以实现跨平台安装，能安装于Windows、Linux、Mac OS及Solaris上。服务器版本需要 JSPs环境及标签库（tag library），因此需要安装一个Tomcat容器。而桌面版自带了一个小型的Web服务器，安装非常简单。

二、安装配置简介
大致知道了regain是什么以后，如果regain的功能正好是您需要的，那我们就来一起进行安装配置吧。
1.下载regain最新版本。主页http://regain.sourceforge.net/
如果只是安装使用的话，可以直接这里下载编译好的版本：http://regain.sourceforge.net/download.php 提供多种平台的最新稳定版本。如果是研究学习，或者想自己做优化修改，则建议下载带源码的版本：http://sourceforge.net /project/showfiles.php?group_id=111168

2.下载后解压到特定目录，本文范例以 e:\Devp\Java\JavaApp\regain 目录为解压目录

3.如果仅仅是下载编译好的版本安装试用的话，几乎都不需要什么设置，直接解压后，打开命令行窗口进入安装目录，直接运行

java -jar regain.jar 命令行

运行后会在右下角systray系统托盘处出现regain的形状为“r”的小图标，右击会弹出search\status \Perferences菜单。直接选择Search就会打开查询页面。其实如果第一次运行，系统会自动弹出欢迎页面。Perferences设置页面可 以增加用户要索引的文件数据目录和web端口。

4.更多设置在conf目录中，主要设置文件包括如下4个文件，设置都非常简单直观
现在把比较重要的设置稍做解释。

（1）SearchConfiguration.xml  主要包括查询模块的设置。
...
&#60;!-- The search index 'main' --&#62;
&#60;index name="main" default="true" isparent="true"&#62;
&#60;!-- The directory where the index is located --&#62;
 &#60;dir&#62;D:\SearchEngine\Index\regainindex&#60;/dir&#62;索引放置的目录
&#60;/index&#62;

（2）DesktopConfiguration.xml 主要包括本地桌面查询设置，可通过perferences页面设置。

&#60;configuration&#62;

&#60;!-- The interval to update the search index in minutes --&#62;
&#60;interval&#62;1440&#60;/interval&#62;

&#60;!-- Allow/Disallow external access to the running desktop instance ...</description>
		<link>http://www.xeie.cn/index.php/regain%e5%ae%89%e8%a3%85/regain%e5%ae%89%e8%a3%85%e9%85%8d%e7%bd%ae%e7%ae%80%e4%bb%8b/</link>
			</item>
	<item>
		<title>lucene下进行文本索引</title>
		<description>lucene是一个用java开发的开源文本索引和检索API。为了进一步阅读本文中即将阐述的索引技术，你需要对lucene的索引结构有个大致 的了解。正如我在本系列的以前的文章中提到的，一个典型的lucene索引存储在硬盘的文件系统的某个目录(directory)中。
lucene中一个索引的核心元素包括片段(segment)，文档(document)，字段(field)，条目(term)等。每个索引 (index)包含一到多个片段，每个片段包含一到多个文档，每个文档包含一到多个字段，每个字段包含一到多个条目，每个条目是对字段进行描述的键值对。 一个片段由一系列的文件 (file)组成，构成片段的文件的确切数字因不同的索引(index)而不同，取决于索引中字段的数目。同一片段的所有文件共享通用的前缀，通过不同的 后缀区分他们。你可以把片段假想为一个子索引，虽然片段不是一个完全独立的索引。
-rw-rw-r--    1 otis     otis            4   Nov 22 22:43 deletable
-rw-rw-r--    1 otis     otis      1000000 ...</description>
		<link>http://www.xeie.cn/index.php/lucene%e6%96%87%e6%9c%ac%e7%b4%a2%e5%bc%95/lucene%e4%b8%8b%e8%bf%9b%e8%a1%8c%e6%96%87%e6%9c%ac%e7%b4%a2%e5%bc%95/</link>
			</item>
	<item>
		<title>Apache Jakarta Lucene文本检索</title>
		<description>Lucene是一个可以为应用添加文本索引和检索功能的Java类库。它不是一个可以下载、安装、运行的完整应用， 它提供了一个简单但功能强大的核心API。你仅需要知道一些Lucene类和方法就可以踏上使用的道路了。
Lucene主要提供了两个服务：文本索引，文本检索。这两个功能互相相对独立，虽然索引不用说影响着检索。这篇文章我将专注于讲解文本索引，我们会看到提供文本索引功能的一些核心lucene类。
Lucene背景
Lucene最初是由Doug Cutting开发的，可以通过SourceForge(传说中的SF)下载到。作为服务器端的开源java产品于2001年9月份加入了apache软 件基金会的jakarta家族。从那时发布的每一个版本，这个项目都吸引了越来越多的用户和开发者。2002年11月Lucene Version1.2发布了，1.3版本开发中。通过那些标注为"Powered by Lucene"的组织，我听说了FedEx，Overture, Mayo Clinic, Hewlett Packard, New Scientist magazine, Epiphany等等正在使用，至少在评估Lucene。
Lucene安装
跟其他jakarta项目一样，Lucene以预编译二进制或源码的形式发布。从Lucene的发布页你可以下载到最新的Lucene版本。如果你喜欢使 用最新的特性，还有当日最新版提供。为了示范Lucene的用法，我假想大家都在使用预编译版本，直接下载Lucene.jar把它加入到你的 CLASSPATH环境变量中。如果你选择下载源码包，自己进行编译，那么你需要jakarta ant 和javaCC，这两个也是免费提供下载的。虽然开发javaCC的公司已经不存在了，你仍然可以从本文参考部分找到下载的URL。
Lucene索引
在转向代码之前，先让我们看一看Lucene用于文本索引的主要Java类，它们是IndexWriter，Analyzer，Document和 Field。IndexWriter用于创建新索引和添加文档到存在的索引中去。文本被索引之前，先被传递给Analyzer，Analyzers负责从 要索引的文本中提取可索引的令牌符号，把不可索引的剔除掉。Lucene有一些不同的Analyzer实现，其中的一些负责对无意义的终止字符（一些对区 分文档没有帮助的经常用到的诸如"a","an","the","in","the"等单词）做跳过处理，一些负责把令牌词处理成小写，以便检索时可以做到大小写不敏感，还有一些其他的不赘述了。
索引是文档的集合，文档是字段的集合，每个字段有名称（key，键）和内容(value，值)。考虑到一个文档对应RDBMS（关系型数据库管理系统）中表的一行，一个字段对应表的那一行的某一列。
现在，让我们假定一个简单的场景，你有一些文本需要索引，这些文本存储在一个字符串实例变量中，下面我们使用一个java类来描述上述的场景。

import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;

/**
 * LuceneIndexExample 类提供了一个简单的使用lucene进行索引的例子
 * 它在一个临时目录中创建了一个名称为"index-1"的新索引，
 * 每次调用向该索引中添加一个包含一个字段的文档
 */
public class LuceneIndexExample
{
    public static void main(String args[]) throws Exception
    ...</description>
		<link>http://www.xeie.cn/index.php/apache-jakarta-lucene/apache-jakarta-lucene%e6%96%87%e6%9c%ac%e6%a3%80%e7%b4%a2/</link>
			</item>
	<item>
		<title>Apache Solr实现企业搜索</title>
		<description>基于 Lucene 搜索引擎并且在 Apache Software License 许可下以开源形式提供，Solr 是（根据 Lucene 站点）“基于 Lucene Java™ 搜索库、配有 XML/HTTP 和 JSON API、命中结果突出显示、分面组配式搜索、缓存、复制和 Web 管理界面的开源企业搜索服务器”。

其中值得注意的是，大流量的 Web 站点、Netflix、Digg 和 CNET 的 News.com 和 CNET Reviews 使用 Solr 来增强搜索功能。由 Solr 驱动的公共站点的长串列表可以在 Solr 维基中找到（请参阅 参考资料）。

了解如何使用 Solr 和 PHP 创建搜索汽车零部件数据库的小型应用程序。虽然示例数据库只是包含一些记录，但是它轻轻松松就能包含数百万条记录。本文中使用的所有源代码均可从 下载 部分获得。

安装 Solr

要将 Solr 与 PHP 结合使用，您必须安装 Solr，设计索引，准备 Solr 要索引的数据，载入索引，编写执行查询的 ...</description>
		<link>http://www.xeie.cn/index.php/apache-solr%e4%bc%81%e4%b8%9a%e6%90%9c%e7%b4%a2/apache-solr%e5%ae%9e%e7%8e%b0%e4%bc%81%e4%b8%9a%e6%90%9c%e7%b4%a2/</link>
			</item>
	<item>
		<title>Apache Solr项目介绍</title>
		<description>Apache Solr项目，是一款基于Apache Lucene的开源企业搜索服务器，最近发布了1.3版。InfoQ采访了Solr的创建者Yonik Seeley，了解了新版本的更多信息和Solr提供给最终用户的功能。

Seeley首先描述了目标用户：“需要搜索框、分面浏览（导航）或者两者结合的任何人”，Solr的关键特性包括：

* 基于标准的开放接口——Solr搜索服务器支持通过XML、JSON和HTTP查询和获取结果。
* 易管理——Solr可以通过HTML页面管理，服务器统计数据以JMX输出，Solr配置通过XML完成。
* 分面浏览——搜索结果自动分类。
* 突出显示命中词——匹配的字符自动在搜索结果中高亮显示。
* 可伸缩性——快速增量更新和快照分发/复制到其他服务器。
* 灵活的插件体系——新功能能够以插件的形式方便的添加到Solr服务器上。

Seeley同时谈到了该版本中的主要新功能：

* 分布式搜索——索引现在可以透明的分割成多个部分，单个Solr服务器基于各个配置和模式支持多索引，无须停止Solr服务器就可以改动主要的配置。
* 扩展了查询功能——包含了一个新的Java客户端（SolrJ）和若干新功能，例如直接配置对于特定查询哪些文档首先命中、近似命中、搜索过期、记录分面时间和拼写检查
* 增强了数据导入工具——数据库和其他结构化数据源现在都可以导入、映射和转化。
* 更多可定制扩展点——存在一个新的更新处理器链，允许在查询时修改和重定向文档；一个搜索组件链修改和添加查询结果、用户查询分析器和插件式功能。
* 性能增强——显著提高了索引速度，二进制响应格式和快速查询删除功能。

详细的更新日志可以这里获得。

Seeley谈到了更多Solr在伸缩性、功能和实用性方面的细节：

Solr已经部署过数以百万计容量的文档，如果借助分布式搜索，Solr应该能够处理数十亿的文档集合。

Solr基于Lucene，具有优秀的全文相关性，可以很方便的提供词组接近性增强、近期文档增强、编辑增强和基于数字值的专有函数的定制评分机制。

AOL正在使用Solr增强它的频道功能：音乐、橄榄球运动、食谱、参考中心、房地产和汽车都使用这项技术。Solr的搜索功能也应用于Netflix、 Zappos、Gamespot、和Internet Archive。还有很多大客户我目前还不能透漏。

关于Solr的未来计划，Seeley提到了更多的可扩展性、对大集群更方便的配置和管理、基于区域和实时的搜索、重构以使用Spring配置插件。Seeley同时提供了一个邮件列表，在那里他详细讨论了Solr未来、特别是2.0版的计划。 </description>
		<link>http://www.xeie.cn/index.php/apache-solr/apache-solr%e9%a1%b9%e7%9b%ae%e4%bb%8b%e7%bb%8d/</link>
			</item>
	<item>
		<title>apache lucene 的核心类</title>
		<description>下边介绍一下lucene的核心类：(参考lucene in action)
主要有两部分组成，核心索引类和核心搜索类，顾名思意，就是用来建立索引和用来搜索的类。

IndexWriter：可以对索引进行写操作，但不能读取或者搜索。是唯一能写索引的类。

Directory：Directory 类代表一个Lucene索引的位置。它是一个抽象类，允许它的子类(其中的两个包含在Lucene中)在合适时存储索引。在我们的Indexer示例中， 我们使用一个实际文件系统目录的路径传递给IndexWriter的构造函数来获得Directory的一个实例。IndexWriter然后使用 Directory的一个具体实现FSDirectory，并在文件系统的一个目录中创建索引。在你的应用程序中，你可能较喜欢将Lucene索引存储在 磁盘上。这时可以使用FSDirectory，一个包含文件系统真实文件列表的Driectory子类，如同我们在Indexer中一样。另一个 Directory的具体子类是RAMDirectory。尽管它提供了与FSDirectory相同的接口，RAMDirectory将它的所有数据加 载到内存中。所以这个实现对较小索引很有用处，可以全部加载到内存中并在程序关闭时销毁。因为所有数据加载到快速存取的内存中而不是在慢速的硬盘 上，RAMDirectory适合于你需要快速访问索引的情况，不管是索引或搜索。做为实例，Lucene的开发者在所有他们的单元测试中做了扩展使用： 当测试运行时，快速的内存驻留索引被创建搜索，当测试结束时，索引自动销毁，不会在磁盘上留下任何残余。当然，在将文件缓存到内存的操作系统中使用时 RAMDirectory和FSDirectory之间的性能差别较小

Analyzer:分析文本内容，提取关键字

Document:一个Document代表字段的集合。你可以把它想象为以后可获取的虚拟文档—一块数据，如一个网页、一个邮件消息或一个文本文件。一个文档的字段代表这个文档或与这个文档相关的元数据

Field:在索引中的每个Document含有一个或多个字段，具体化为Field类。每个字段相应于数据的一个片段，将在搜索时查询或从索引中重新获取。
Lucene提供四个不同的字段类型，你可以从中做出选择：

Keyword—不被分析，但是被索引并逐字存储到索引中。这个类型适合于原始值需要保持原样的字段，如URL、文件系统路径、日期、个人名称、社会安全号码、电话号码等等。例如，我们在Indexer(列表1.1)中把文件系统路径作为Keyword字段。

UnIndexed —不被分析也不被索引，但是它的值存储到索引中。这个类型适合于你需要和搜索结果一起显示的字段(如URL或数据库主键)，但是你从不直接搜索它的值。因 为这种类型字段的原始值存储在索引中，这种类型不适合于存放比较巨大的值，如果索引大小是个问题的话。

UnStored—和UnIndexed相反。这个字段类型被分析并索引但是不存储在索引中。它适合于索引大量的文本而不需要以原始形式重新获得它。例如网页的主体或任休其它类型的文本文档。

Text —被分析并索引。这就意味着这种类型的字段可以被搜索，但是要小心字段大小。如果要索引的数据是一个String，它也被存储；但如果数据(如我们的 Indexer例子)是来自一个Reader，它就不会被存储。这通常是混乱的来源，所以在使用Field.Text时要注意这个区别。
所有字段由名称和值组成。你要使用哪种字段类型取决于你要如何使用这个字段和它的值。严格来说，Lucene只有一个字段类型：以各自特征来区分的字段。有些是被分析的，有些不是；有些是被索引，然面有些被逐字地存储等等。
注 意 注意Field.Text(String, String)和Field.Text(String, Reader)之间的区别。String变量存储字段数据，而Reader变量不存储。为索引一个String而又不想存储它，可以用 Field.UnStored(String, String)

下边是核心搜索类：
IndexSearcher：IndexSearcher 用来搜索而IndexWriter用来索引：暴露几个搜索方法的索引的主要链接。你可以把IndexSearcher想象为以只读方式打开索引的一个类。 它提供几个搜索方法，其中一些在抽象基类Searcher中实现；最简单的接受单个Query对象做为参数并返回一个Hits对象。这个方法的典型应用类 似这样：
IndexSearcher is = new IndexSearcher(
FSDirectory.getDirectory(“/tmp/index”, false));
Query q = new TermQuery(new Term(“contents”, “lucene”));
Hits hits = is.search(q);
Term:
Term是搜索的基本单元。与Field对象类似，它由一对字符串元素组成：字段的名称和字段的值。注意Term对象也和索引过程有关。但是它们是由Lucene内部生成，所以在索引时你
一般不必考虑它们。在搜索时，你可能创建Term对象并TermQuery同时使用。
Query q = new TermQuery(new Term(“contents”, “lucene”));
Hits hits = is.search(q);
这段代码使Lucene找出在contents字段中含有单词lucene的所有文档。因为TermQuery对象继承自它的抽象父类Query，你可以在等式的左边用Query类型。

Query
Lucene 中包含一些Query的具体子类。到目前为止，在本章中我们仅提到过最基本的Lucene Query：TermQuery。其它Query类型有BooleanQuery，PhraseQuery, ...</description>
		<link>http://www.xeie.cn/index.php/apache-lucene%e6%a0%b8%e5%bf%83%e7%b1%bb/apache-lucene-%e7%9a%84%e6%a0%b8%e5%bf%83%e7%b1%bb-2/</link>
			</item>
</channel>
</rss>
