用lucene建立全文检索,要求中文分词
我现在做的是个网站的全文检索,项目下有很多html,html里面存放很多文章,请问我在建立索引的时候,应该怎么建立,是把内容和路径都建立上吗,然后到存的时候把录取取出来,...
我现在做的是个网站的全文检索,项目下有很多html,html里面存放很多文章,请问我在建立索引的时候,应该怎么建立,是把内容和路径都建立上吗,然后到存的时候把录取取出来,然后再用stream读这个文件吗,本人刚学,不太明白,然后如何将检索的内容高亮显示出来呢,急,求助,各位大虾,要求效果就想是论坛搜索那样。另中文分词,请问哪个好?
展开
2个回答
展开全部
索引的话,推荐使用lucene,我最近的项目就是用这个,蛮好用。
不管你是否使用数据库,你都应该将html页面解析成标准的XML的页面,这样方便进行下一步操作。如果你只需要html的文章内容的话,还是比较简单的。分别对html文章内容和html地址建索引,那样你文章命中了搜索关键字的话,可以把html地址也拿出来,例 Field field1 = new Field("address",address,Field.Store.YES, Field.Index.TOKENIZED);
Field field1_1 = new Field("content",content,Store.YES,Index.UN_TOKENIZED);
doc1.add(field1);
doc1.add(field1_1);
再具体点的内容,去下一个lucene的API文档,把field,document,indexwriter,indexsearcher,这几个类看一下,还是比较好懂的。
分词器的建议使用,IKAnalyzer,在开源中文分词器里算是很好的,而且一直在稳定的更新版本。
不管你是否使用数据库,你都应该将html页面解析成标准的XML的页面,这样方便进行下一步操作。如果你只需要html的文章内容的话,还是比较简单的。分别对html文章内容和html地址建索引,那样你文章命中了搜索关键字的话,可以把html地址也拿出来,例 Field field1 = new Field("address",address,Field.Store.YES, Field.Index.TOKENIZED);
Field field1_1 = new Field("content",content,Store.YES,Index.UN_TOKENIZED);
doc1.add(field1);
doc1.add(field1_1);
再具体点的内容,去下一个lucene的API文档,把field,document,indexwriter,indexsearcher,这几个类看一下,还是比较好懂的。
分词器的建议使用,IKAnalyzer,在开源中文分词器里算是很好的,而且一直在稳定的更新版本。
展开全部
建两个Field吧,把内容和路径都建索引,内容分词,路径不分词。在内容的Field中用Field.store.yes。内容就被存储了,搜索时用就可以读取了(如 Document doc=hits.doc(i); string str=doc.get("内容") ;"内容" 为我建Field时用的),至于分词如果你用的是Lucene.Net,我建议您使用盘古(PanGu)分词,它里面有带高亮显示组件,非常容易实现。示例代码如下
public string highlight(string keyword,Document doc)
{
string result;
PanGu.HighLight.SimpleHTMLFormatter tmp = new PanGu.HighLight.SimpleHTMLFormatter("<font color=\"red\">", "</font>");
PanGu.HighLight.Highlighter hightlighter = new PanGu.HighLight.Highlighter(tmp ,new Segment ());
hightlighter.FragmentSize = 100;
result = hightlighter.GetBestFragment(keyword ,doc.Get ("body"));
return result;
}
盘古分词官网:http://pangusegment.codeplex.com/
public string highlight(string keyword,Document doc)
{
string result;
PanGu.HighLight.SimpleHTMLFormatter tmp = new PanGu.HighLight.SimpleHTMLFormatter("<font color=\"red\">", "</font>");
PanGu.HighLight.Highlighter hightlighter = new PanGu.HighLight.Highlighter(tmp ,new Segment ());
hightlighter.FragmentSize = 100;
result = hightlighter.GetBestFragment(keyword ,doc.Get ("body"));
return result;
}
盘古分词官网:http://pangusegment.codeplex.com/
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询