discuz全文检索lucene解决方案图例

作者 : admin 于 2010年12月17日, 11:17:12
2010
12-17

discuz论坛搜索方案

已经全部调试通过,正在往一个线上环境上部署。文档也在敢写之中,谢谢关注。

WordPress使用Lucene进行搜索

作者 : admin 于 2008年10月18日, 13:52:56
2008
10-18

接上篇,我们使用Lucene Document Field IndexWrite 等方法创建了索引,现在,使用内建的搜索的方法进行检索。
代码如下:

  1. import java.io.*;
  2. import org.apache.lucene.index.Term;
  3. import org.apache.lucene.index.IndexReader;
  4. import org.apache.lucene.analysis.*;
  5. import org.apache.lucene.queryParser.QueryParser;
  6. import org.apache.lucene.search.*;
  7.  
  8. public class Search
  9. {
  10. public static void main( String argv[] ) throws Exception
  11. {
  12. IndexReader reader = IndexReader.open("./index");
  13. Searcher searcher = new IndexSearcher(reader);
  14. SimpleAnalyzeranalyzer = new SimpleAnalyzer();
  15. QueryParser parser = new QueryParser("post_content", analyzer);
  16. Query query = parser.parse( argv[0] );
  17. Hits hits = searcher.search(query);
  18. System.out.println(hits.length() + "个结果");
  19. for(int i=0;i
  20. {
  21. System.out.println(hits.doc(i).get("guid"));
  22. }
  23. }
  24. }

编译后,我们在命令行进行查询:

E:\java>java Search php
40个结果
http://www.sunboyu.cn/?p=332
http://www.sunboyu.cn/?p=164
http://www.sunboyu.cn/?p=213
http://www.sunboyu.cn/?p=123
http://www.sunboyu.cn/?p=124
http://www.sunboyu.cn/?p=180
http://www.sunboyu.cn/?p=283
http://www.sunboyu.cn/?p=282
http://www.sunboyu.cn/?p=234
http://www.sunboyu.cn/?p=53
http://www.sunboyu.cn/?p=159
http://www.sunboyu.cn/?p=235
http://www.sunboyu.cn/?p=221
http://www.sunboyu.cn/?p=73
http://www.sunboyu.cn/?p=11
http://www.sunboyu.cn/?p=51
http://www.sunboyu.cn/?p=240
http://www.sunboyu.cn/?p=196
http://www.sunboyu.cn/?p=52
http://www.sunboyu.cn/?p=308
http://www.sunboyu.cn/?p=298
http://www.sunboyu.cn/?p=9
http://www.sunboyu.cn/?page_id=38
http://www.sunboyu.cn/?p=236
http://www.sunboyu.cn/?p=320
http://www.sunboyu.cn/?p=141
http://www.sunboyu.cn/?p=78
http://www.sunboyu.cn/?p=291
http://www.sunboyu.cn/?p=218
http://www.sunboyu.cn/?p=154
http://www.sunboyu.cn/?p=121
http://www.sunboyu.cn/?p=200
http://www.sunboyu.cn/?p=244
http://www.sunboyu.cn/?p=280
http://www.sunboyu.cn/?page_id=112
http://www.sunboyu.cn/?p=288
http://www.sunboyu.cn/?p=292
http://www.sunboyu.cn/?p=20
http://www.sunboyu.cn/?p=130
http://www.sunboyu.cn/?p=87

E:\java>
可以看到,当我们搜索关键词“php”,返回了所有存在php关键词的链接。

当然,这个只是个简单的演示,在创建索引的时候,我们使用了SimpleAnalyzer的方法,这个方法对中文,其实就是基于单字的分词,对于中文信息检索基本是没有意义的。Lucene提供了开发的源代码,因为,我们可以很方便得为其附加我们自己的中文分词方法。

Lucene创建Document代码部分-循序渐进学Lucene

作者 : admin 于 2008年10月08日, 18:47:49
2008
10-8
  1. import java.io.*;
  2. import org.apache.lucene.document.Document;
  3. import org.apache.lucene.document.Field;
  4. import org.apache.lucene.index.IndexWriter;
  5. import org.apache.lucene.analysis.SimpleAnalyzer;
  6. public class Index
  7. {
  8. public static void main( String args[] )
  9. {
  10. Document doc = new Document();
  11. //注释1
  12. Field f1 = new Field("name1","value1",Field.Store.YES,Field.Index.TOKENIZED);
  13. Field f2 = new Field("name2","value2",Field.Store.YES,Field.Index.TOKENIZED);
  14. doc.add( f1 );
  15. doc.add( f2 );
  16. try
  17. {
  18. IndexWriter writer = new IndexWriter( "./" , new SimpleAnalyzer() , true );
  19. writer.addDocument( doc );
  20. writer.close();
  21. }
  22. catch (Exception e)
  23. {
  24.                        e.printStackTrace();
  25. }
  26. }
  27. }

注释1:Field方法的在2.0.0版本中有5种方法,在2.3.2中增加到了7种,详细用法请参阅官方文档
http://lucene.apache.org/java/2_0_0/api/org/apache/lucene/document/Field.html
http://lucene.apache.org/java/2_3_2/api/org/apache/lucene/document/Field.html

Lucene文档模型(Document)简解

作者 : admin 于 2008年10月04日, 11:39:51
2008
10-4

最近仔细研究了Lucene的文档模式,现用通俗语言来解释。

Lucene的索引,基本结构为 Index->Document->Field 这样可以构建一个非关系型二维结构,由不同field构成的一个Document,由不同的Document构成的Index。

Lucene的Field方法很丰富,在2.0版本以后,由三种Field类型增加到了5种,支持三种数据流的传入方式(字符串,读取,二进制传入),支持数据的存储,索引,分词。

而我们使用Lucene的主要功能在于分词和生成索引。具体应用待详细使用后介绍。

Nutch开源爬虫+Lucene开源分词工具

作者 : admin 于 2008年09月21日, 19:25:08
2008
09-21

Lucene是一个java写的开源分词工具,官方主页 http://lucene.apache.org/ 是apache下边的一个项目。

Lucene主要应用为分词并创建索引,提供高速的搜索服务,能讲海量的数据进行分词整理并生成轻量的数据包进行索引存储。

Lucene不是一个搜索引擎,但Lucene项目下有个子项目,Nutch爬虫。Nutch同样是基于Java的一个开源的爬虫,配合Lucene的分词索引功能,构建一个强大的开源搜索引擎。

官方Lucene已经更新到2.3.2版本http://svn.apache.org/repos/asf/lucene/java/tags/lucene_2_3_2/CHANGES.txt,Nutch已经更新到了0.9版本http://www.apache.org/dist/lucene/nutch/CHANGES-0.9.txt。

在测试中,我使用了Nutch0.7.2 http://apache.mirror.phpchina.com/lucene/nutch/nutch-0.7.2.tar.gz,比较稳定,而且对中文分词的效果也不错,能达到使用的水平,因为没有服务,只在本机做了简单测试,没有对效率进行评估,若哪位达人有闲置服务器,可借老朽一用。