Lucene教程 - Lucene安装、配置、实例 全文検索エンジン「Lucene.Net」を使う 「Lucene.Net」は.NET Framework上で利用できる「全文検索エンジン」です。例えば、ASP.NETを使ってWebサイトを作成する際に、サイト内のコンテンツを検索する検索ページを作成したいという場合や、Windowsアプリケーションで全文検索機能を利用したい場合にLucene.Netが利用できます。 Lucene.NetはApache Software Foundationが開発しているプロジェクトの1つで、オープンソースで開発されています。Java言語で記述された「Lucene」がそのオリジナルであり、これは、Wikipediaをはじめ多くのWebサイトで現在利用されています( Lucene-java WikiのPowerdBy ) Luceneの.NET版であるLucene.NETは、Java版と同様Apache Software Foundationの「 Lucene.Netプロジェクト 」で提供されています。今回は、このLucene.Netを紹介します。 Lucene.Netの概要 全文検索とは、簡単にいうと「複数のテキストから特定の文字列を検索する」機能です。 「逐次検索型」は、UNIXのgrepコマンドのように、実行するたびにテキストをすべて走査して検索を行うものです。 Lucene.NETはインデックス型で、事前にテキストからトークンを切り出しておき、インデックスを作成したうえで検索処理を実行します。 全文検索を行うLucene.NET本体に加えて、日本語の環境では、テキストからトークンを切り出すための独自の処理が必要となります。 英文では単語ごとにスペースで区切られて文章が記述されているため、文章を解析するための処理はそれほど複雑ではありませんが、単語の区切りが明確でない日本語の文章を解析するには、独自の高度な形態素解析処理が必要となります。 オリジナルであるJava版のLuceneを含め、Apache Software Foundationで配布されているLuceneには、日本語に対応したトークンを取り出す機能(=日本語アナライザ)が付属していません。 Lucene.Netによる全文検索処理 Lucene.Netでは、主に次の2つの処理を行います。 インデックス作成処理 検索処理 インデックスを作成すれば、検索処理が利用可能となります。
Lucene索引中的编码问题,好郁闷 - 巴士飞扬-技术BLOG 这几天一直在研究Lucene索引,遇到一些问题,搞得我头都大了.我不知道别人是怎么做的. 开始时,我是把内容读取出来,直接索引在索引文件里,这样就方便在查询时读取内容并高亮显示.但是给果发现,这个东西很受字符编码的影响,于是,我就在文件读取时加上一个编码,可是发现中文检索不出来. 我是这样做的,索引文件contents: doc.add(new Field("contents", new FileReader(file))); 结果这样做导致问题的出现,原来FileReader读取文件内容时是采取的系统编码,这样就导致UTF-8的文件可能以GBK方式读取进来(因为我发现GBK的没出现问题)进行索引,结果导致在检索时,检索不到. 后来,我就换了一个: doc.add(new Field("contents", FileDocument.readFileContents(file.getCanonicalPath(), charset), Field.Store.YES, Field.Index.TOKENIZED)); 其中readFileContents是我自己写的按照charset编码读取文件内容的函数.这样做能解决索引的问题.但是,这样索引是把文件内容都写到索引中,会导致索引文件很大很大,也就会增加索引时的负担.所以,我还是放弃这样的解决办法了. 回过来继续使用前一个索引方案,但是对它进行改进.后来想想,我只要把doc.add(new Field("contents", new FileReader(file)));里的第二个参数FileReader,让他能以相应的编码来加载文件就可以了.于是我看了一下FileReader的构造函数,没有带编码的构造函数.怎么办.迷惑之中,我尝试用InputStreamReader类实例来代替FileReader,没想到,结果居然能成功,代码如下: doc.add(new Field("contents", new InputStreamReader(new FileInputStream(file.getCanonicalPath()), charset))); 他们是Field.Index.TOKENIZED和Field.Store.NO的。 Tags: FileReader Lucene InputStreamReader 索引 搜索引擎 |
Lucene / Solr 开发经验(二)_Goldhwi.狼 1 lucene简介 1.1 什么是lucene Lucene是一个全文搜索框架,而不是应用产品。因此它并不像www.baidu.com 或者google Desktop那么拿来就能用,它只是提供了一种工具让你能实现这些产品。 1.2 lucene能做什么 要回答这个问题,先要了解lucene的本质。 1.3 你该不该选择lucene 下面给出一些测试数据,如果你觉得可以接受,那么可以选择。 2 lucene的工作方式 lucene提供的服务实际包含两部分:一入一出。 2.1写入流程 源字符串首先经过analyzer处理,包括:分词,分成一个个单词;去除stopword(可选)。 2.2读出流程 用户提供搜索关键词,经过analyzer处理。 3 一些需要知道的概念 lucene用到一些概念,了解它们的含义,有利于下面的讲解。 3.1 analyzer Analyzer 是分析器,它的作用是把一个字符串按某种规则划分成一个个词语,并去除其中的无效词语,这里说的无效词语是指英文中的“of”、 “the”,中文中的 “的”、“地”等词语,这些词语在文章中大量出现,但是本身不包含什么关键信息,去掉有利于缩小索引文件、提高效率、提高命中率。 3.2 document 用户提供的源是一条条记录,它们可以是文本文件、字符串或者数据库表的一条记录等等。 3.3 field 一个Document可以包含多个信息域,例如一篇文章可以包含“标题”、“正文”、“最后修改时间”等信息域,这些信息域就是通过Field在Document中存储的。 3.4 term term是搜索的最小单位,它表示文档的一个词语,term由两部分组成:它表示的词语和这个词语所出现的field。 3.5 tocken tocken是term的一次出现,它包含trem文本和相应的起止偏移,以及一个类型字符串。 3.6 segment 添加索引时并不是每个document都马上添加到同一个索引文件,它们首先被写入到不同的小文件,然后再合并成一个大索引文件,这里每个小文件都是一个segment。 4 lucene的结构 lucene包括core和sandbox两部分,其中core是lucene稳定的核心部分,sandbox包含了一些附加功能,例如highlighter、各种分析器。 5 如何建索引 5.1 最简单的能完成索引的代码片断
An Introduction to Java GUI Programming Introduction This article is meant for the individual who has little or no experience in Java GUI programming. As such, this paper will focus on the hierarchal tree structure that roots at the frame and goes into the content pane panel. The primary focus will then be on the button widget (control in .NET) and the corresponding method used to handle that event listener. Any .NET programmer will find these concepts extremely similar, except that the coding style requires more text is some cases and the terms used are different. A quick and easy way to compile this code on the command line after installing Sun's Java Runtime at www.java.com and Sun's J2EE SDK 5.0 is to go to the default directory: c:\Sun\SDK\JDK\bin> type con > somecode.java Ctrl-Z and then compile. Java GUI programming involves two packages: the original abstract windows kit (AWT) and the newer Swing toolkit. Hide Copy Code c:\Sun\SDK\jdk\bin>javac.exe Sys.java // the javac.exe compiler // compiles the source code C:\...
lucene 建立简单搜索引擎实例 - java05的专栏 建立搜索引擎四步: 抓取数据---》解析数据----》创建索引-----》执行搜索 第一部分:体会 今天做了一个简单示例,用的版本是lucune 2.4.1,跟教科书上的有些不同,但教科书上的示例都能正常执行。 第二部分:遇到的问题 刚把程序写出来的时候,出现了搜索不到结果的情况,后来发现是在添加Field的时候没有把搜索的字段设置成 Field.Index.ANALYZED, 如果你在搜索器中设定的搜索字段是 text,那么在创建索引的时候应该把这个字段设置成可以被索引。 也就是 field = new Field("text",text,Field.Store.YES,Field.Index.ANALYZED); 而不是 field = new Field("text",text,Field.Store.YES,Field.Index.NO); 第三部分:新老版本变更的问题 以下是lucune2.4.1版本与老版本的不同之处。 创建索引时的不同 老版本 IndexWriter writer = new IndexWriter(indexPath,new StandardAnalyzer(),true); 新版本 IndexWriter writer = new IndexWriter(indexPath,new StandardAnalyzer(),true,IndexWriter.MaxFieldLength.UNLIMITED); 在执行索引时的不同,注意看下 search和searchNew两个方法的不同就可以了 第四部分:成果 LuceneIndexer.java LuceneSearcher.java 另有两个辅助类 FileList和FileText
How to Use Trees (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components) With the JTree class, you can display hierarchical data. A JTree object does not actually contain your data; it simply provides a view of the data. Like any non-trivial Swing component, the tree gets data by querying its data model. Here is a picture of a tree: As the preceding figure shows, JTree displays its data vertically. Branch nodes can have any number of children. A specific node in a tree can be identified either by a TreePath, an object that encapsulates a node and all of its ancestors, or by its display row, where each row in the display area displays one node. An expanded node is a non-leaf node that will display its children when all its ancestors are expanded.A collapsed node is one which hides them.A hidden node is one which is under a collapsed ancestor. The rest of this section discusses the following topics: Creating a Tree Here is a picture of an application, the top half of which displays a tree in a scroll pane. Responding to Node Selection Customizing a Tree's Display
Using Swing Components: Examples (The Java™ Tutorials > Creating a GUI with Swing > Using Swing Components) The table that follows lists every example in the Using Swing Components lesson, with links to required files and to where each example is discussed. The first column of the table has links to JNLP files that let you run the examples using Java™ Web Start. NOTE: Release 7.0 is required to run all applets and Java Web Start examples. To run an example using Java Web Start, click the [Launch] link in the first column of the table. Compiling and Running the Examples Locally The second column in the table below has links to zip files for each demo that you can open and run in the NetBeans IDE. If you download an individual example, take care to have all the necessary files in the proper hierarchy when you compile and run it. Here is a typical setup: You can find out which files each example needs by consulting the following table or by looking at the comments at the beginning of each source file. Table of Examples * This application is not currently available with Java Web Start. Geek Images