Lucene整合"庖丁解牛"中文分词 ----入门 2
相关的lucene包请到:http://code.google.com/p/paoding/downloads/list 下载。
入门第一篇:Lucene整合"庖丁解牛"中文分词 ----入门 1
http://luanmad2009.s156.eatj.com/viewthread.jsp?tid=338&page=1
相关的 Lucene 中文引擎,庖丁解牛的辞典参数配置方法请看 入门第一篇。
目录结构图:
E:\ECLIPSE\LUCENETEST
│ .classpath
│ .mymetadata
│ .project
│
├─.myeclipse
├─src
│ │ paoding-dic-home.properties
│ │
│ └─cn
│ └─luanmad
│ └─lucene
│ Test.java
│
└─WebRoot
│ index.jsp
│
├─META-INF
│ MANIFEST.MF
│
└─WEB-INF
│ web.xml
│
├─classes
│ │ paoding-dic-home.properties
│ │
│ └─cn
│ └─luanmad
│ └─lucene
│ Test$1.class
│ Test.class
│
└─lib
commons-logging.jar
junit.jar
lucene-analyzers-2.2.0.jar
lucene-core-2.2.0.jar
lucene-highlighter-2.2.0.jar
paoding-analysis.jar
Test.java
代码:
package cn.luanmad.lucene;
import net.paoding.analysis.analyzer.PaodingAnalyzer;
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;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.TermPositionVector;
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.search.Searcher;
import org.apache.lucene.search.highlight.Formatter;
import org.apache.lucene.search.highlight.Highlighter;
import org.apache.lucene.search.highlight.QueryScorer;
import org.apache.lucene.search.highlight.TokenGroup;
import org.apache.lucene.search.highlight.TokenSources;
import org.apache.lucene.store.LockObtainFailedException;
import java.io.IOException;
import java.io.StringReader;
import java.net.URLDecoder;
import java.net.URLEncoder;
//测试"庖丁解牛"中文分词器的分词效果
public class Test
{
public String myLucene(String myInputString) throws Exception, IOException
{
String IDNEX_PATH = "E:/paoding_test_index";
// 获取Paoding中文分词器
//二元分词
Analyzer analyzer = new PaodingAnalyzer();
//一元分词
//Analyzer analyzer = new StandardAnalyzer();
String indexString = "luanmad!乱码D七彩天空,经典文章无处不在!"+
"架构篇:千万级的注册用户,千万级的帖子,nTB级的附件,还有巨大的日访问量,大型网站采用什么系统架构保证性能和稳定性?"+
"首先讨论一下大型网站需要注意和考虑的问题。数据库海量数据处理:负载量不大的情况下select、delete和update是响应很迅速的,最多加几个索引就可以搞定,但千万级的注册用户和一个设计不好的多对多关系将带来非常严重的性能问题。另外在高UPDATE的情况下,更新一个聚焦索引的时间基本上是不可忍受的。索引和更新是一对天生的冤家。"+
"高并发死锁:平时我们感觉不到,但数据库死锁在高并发的情况下的出现的概率是非常高的。文件存储的问题:大型网站有海量图片数据、视频数据、文件数据等等,他们如何存储并被有效索引?高并发的情况下IO的瓶颈问题会迅速显现。也许用RAID和专用存贮服务器能解决眼下的问题,但是还有个问题就是各地的访问问题,也许我们的服务器在北京,可能在云南或者***的访问速度如何解决?如果做分布式,那么我们的文件索引以及架构该如何规划。"+
"接下来讨论大型网站的底层系统架构,来有效的解决上述问题。";
myInputString = (new String(myInputString.getBytes("iso8859-1"),"utf-8"));
StringReader reader1 = new StringReader(myInputString);
TokenStream ts = analyzer.tokenStream(myInputString, reader1);
String myString = "";
Token t = ts.next();
while (t != null)
{
myString += t.termText() + " ";
t = ts.next();
}
System.out.print("分词结果:"+myString);
if("".equalsIgnoreCase(myString) || null == myString)
{
System.out.println("无匹配值!");
return "无匹配值!" ;
}
// 建立索引
IndexWriter writer = new IndexWriter(IDNEX_PATH, analyzer, true);
Document doc = new Document();
Field field = new Field("content", indexString,Field.Store.YES,
Field.Index.TOKENIZED, Field.TermVector.WITH_POSITIONS_OFFSETS);
doc.add(field);
writer.addDocument(doc);
writer.close();
System.out.println("Indexed success!");
// 检索
IndexReader reader = IndexReader.open(IDNEX_PATH);
QueryParser parser = new QueryParser("content", analyzer);
Query query = parser.parse(myString);
Searcher searcher = new IndexSearcher(reader);
Hits hits = searcher.search(query);
if (hits.length() == 0)
{
System.out.println("hits.length=0");
return "无匹配值!";
}
Document doc2 = hits.doc(0);
// 高亮处理
String text = doc2.get("content");
TermPositionVector tpv = (TermPositionVector) reader.getTermFreqVector(
0, "content");
TokenStream ts1 = TokenSources.getTokenStream(tpv);
Formatter formatter = new Formatter()
{
public String highlightTerm(String srcText, TokenGroup g)
{
if (g.getTotalScore() <= 0)
{
return srcText;
}
return "<b><font color=red>" + srcText + "</font></b>";
}
};
Highlighter highlighter = new Highlighter(formatter, new QueryScorer(
query));
String result = highlighter.getBestFragments(ts1, text, 5, "…");
System.out.println("result:nt" + result);
reader.close();
return result;
}
}
index.jsp
代码:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page import="cn.luanmad.lucene.Test" %>
<%@ page import="java.net.URLEncoder" %>
<jsp:directive.page import="java.net.URLDecoder;"/>
<html>
<head>
<title>luanmad!乱码D七彩天空</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="luanmad!,乱码D,lucene庖丁解牛中文分词">
<meta http-equiv="description" content="luanmad!,乱码D,lucene庖丁解牛中文分词">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<script type="text/javascript">
function convers()
{
var myInputString = document.getElementById("myInputString").value;
myInputString = encodeURI(myInputString,"utf-8");
myForm.submit();
}
</script>
</head>
<body>
<center>
<h1><font color=red>luanmad!Search</font></h1>
<h4><font color=blue>乱码D七彩天空</font></h4>
<form action="index.jsp" name="myForm">
<input type="text" name="myInputString" id="myInputString" >
<input type="button" name="mySearching" value="Go" onclick = "convers()">
结果:
<%
String myInputString = request.getParameter("myInputString");
if(null == myInputString)
{
myInputString = "luanmad!";
}
Test test = new Test();
out.println(test.myLucene(myInputString));
%>
</form>
<hr></hr>
原文:
<td>
luanmad!乱码D七彩天空,经典文章无处不在!架构篇:
千万级的注册用户,千万级的帖子,nTB级的附件,还有巨大的日访问量,大型网站采用什么系统架构保证性能和稳定性?
首先讨论一下大型网站需要注意和考虑的问题。数据库海量数据处理:负载量不大的情况下select、delete和update是响应很迅速的,最多加几个索引就可以搞定,但千万级的注册用户和一个设计不好的多对多关系将带来非常严重的性能问题。另外在高UPDATE的情况下,更新一个聚焦索引的时间基本上是不可忍受的。索引和更新是一对天生的冤家。
高并发死锁:平时我们感觉不到,但数据库死锁在高并发的情况下的出现的概率是非常高的。文件存储的问题:大型网站有海量图片数据、视频数据、文件数据等等,他们如何存储并被有效索引?高并发的情况下IO的瓶颈问题会迅速显现。也许用RAID和专用存贮服务器能解决眼下的问题,但是还有个问题就是各地的访问问题,也许我们的服务器在北京,可能在云南或者***的访问速度如何解决?如果做分布式,那么我们的文件索引以及架构该如何规划。
接下来讨论大型网站的底层系统架构,来有效的解决上述问题。
<td>
</center>
</body>
</html>
本实例是采用了二元分词来搜索的,二元分词对于单个字是搜索不到的,除非辞典里有。如果想体验一元搜索,只需要把Test.java 中
//二元分词
//Analyzer analyzer = new PaodingAnalyzer();
//一元分词
Analyzer analyzer = new StandardAnalyzer();
切换就行。
附件
可到google一下 luanmad 乱码D
或直接到 http://luanmad2009.s156.eatj.com/viewthread.jsp?tid=339&page=1 下载
- 大小: 167.9 KB
分享到:
相关推荐
支持lucene3的庖丁解牛分词器和字典,可直接调用
庖丁解牛(很好的分词效率) 在做站内全文检索时创建索引时比较快,而且感觉效果比JE要好一些。。
实例是一个java实例,可直接导入到MyEclipse中...其中是lucene3.0整合了庖丁解牛分词法,添加了高亮显示。因为lucene3.0无法整合paoding-analysis.jar 所以我已经把paoding-analysis中的源码整合进来了避免无法整合问题
NULL 博文链接:https://qpshenggui.iteye.com/blog/1157999
支持中文的庖丁解牛,庖丁分词,找了好久才找到的希望对你有帮助。
Lucene加庖丁解牛测试类Lucene加庖丁解牛测试类
由于庖丁官方目前提供可下载尚不支持Lucene 3.0以上版本。因此作者对paoding进行重新编译,使其与最新Lucene 3.0.1版本适用。 Latest paoding 3.0.1 for lucene 3.0.1 使用说明: 先下载2.0.4的版本(h t t p : / ...
Lucene 庖丁解牛分词法 , 能够使用它解决中文分词问题。
赠送jar包:lucene-analyzers-smartcn-7.7.0.jar; 赠送原API文档:lucene-analyzers-smartcn-7.7.0-javadoc.jar; 赠送源代码:lucene-analyzers-smartcn-7.7.0-sources.jar; 赠送Maven依赖信息文件:lucene-...
赠送jar包:lucene-analyzers-common-6.6.0.jar; 赠送原API文档:lucene-analyzers-common-6.6.0-javadoc.jar; 赠送源代码:lucene-analyzers-common-6.6.0-sources.jar; 赠送Maven依赖信息文件:lucene-...
lucene-core-2.9.4,lucene-core-3.0.2,lucene-core-3.0.3,lucene-core-3.4.0
包含翻译后的API文档:lucene-backward-codecs-7.3.1-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.apache.lucene:lucene-backward-codecs:7.3.1; 标签:apache、lucene、backward、codecs、中英...
可以适用于lucene3.5的庖丁解牛分词器jar包
赠送jar包:lucene-backward-codecs-6.6.0.jar; 赠送原API文档:lucene-backward-codecs-6.6.0-javadoc.jar; 赠送源代码:lucene-backward-codecs-6.6.0-sources.jar; 赠送Maven依赖信息文件:lucene-backward-...
包含翻译后的API文档:lucene-analyzers-smartcn-7.7.0-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.apache.lucene:lucene-analyzers-smartcn:7.7.0; 标签:apache、lucene、analyzers、smartcn...
包含翻译后的API文档:lucene-spatial-extras-7.3.1-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.apache.lucene:lucene-spatial-extras:7.3.1; 标签:apache、lucene、spatial、extras、中英对照...
包含翻译后的API文档:lucene-spatial-extras-7.2.1-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.apache.lucene:lucene-spatial-extras:7.2.1; 标签:apache、lucene、spatial、extras、中英对照...
包含翻译后的API文档:lucene-spatial-extras-6.6.0-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.apache.lucene:lucene-spatial-extras:6.6.0; 标签:apache、lucene、extras、spatial、jar包、...
包含翻译后的API文档:lucene-backward-codecs-6.6.0-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.apache.lucene:lucene-backward-codecs:6.6.0; 标签:apache、codecs、lucene、backward、jar包...
包含翻译后的API文档:lucene-backward-codecs-7.2.1-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.apache.lucene:lucene-backward-codecs:7.2.1; 标签:apache、lucene、backward、codecs、中英...