雨中漫步的太阳 2008-09-05 09:34
呵呵,我用web也做了一个,同样是放着luck来的,可以在线对索引文件的管理查看.是用java做的
雨中漫步的太阳 2008-08-06 10:20
不错,但是经常出现假死状态哦 皮肤很漂亮 和office2007的布局有点像 这样的皮肤哪里有下啊
雨中漫步的太阳 2008-08-01 11:36
Lucene 中文分词的 highlight 显示
1 、问题的来源
增加分词以后结果的准确度提高了,但是用户反映返回结果的速度很慢。原因是, Lucene 做每一篇文档的相关关键词的高亮显示时,在运行时执行了很多遍的分词操作。这样降低了性能。
2 、解决方法
在 Lucene1.4.3 版本中的一个新功能可以解决这个问题。 Term Vector 现在支持保存 Token.getPositionIncrement() 和 Token.startOffset() 以及 Token.endOffset() 信息。利用 Lucene 中新增加的 Token 信息的保存结果以后,就不需要为了高亮显示而在运行时解析每篇文档。通过 Field 方法控制是否保存该信息。修改 HighlighterTest.java 的代码如下:
// 增加文档时保存 Term 位置信息。
private void addDoc(IndexWriter writer, String text) throws IOException
{
Document d = new Document();
//Field f = new Field(FIELD_NAME, text, true, true, true);
Field f = new Field(FIELD_NAME, text ,
Field.Store.YES, Field.Index.TOKENIZED,
Field.TermVector.WITH_POSITIONS_OFFSETS);
d.add(f);
writer.addDocument(d);
}
// 利用 Term 位置信息节省 Highlight 时间。
void doStandardHighlights() throws Exception
{
Highlighter highlighter =new Highlighter(this,new QueryScorer(query));
highlighter.setTextFragmenter(new SimpleFragmenter(20));
for (int i = 0; i < hits.length(); i++)
{
String text = hits.doc(i).get(FIELD_NAME);
int maxNumFragmentsRequired = 2;
String fragmentSeparator = "...";
TermPositionVector tpv = (TermPositionVector)reader.getTermFreqVector(hits.id(i),FIELD_NAME);
// 如果没有 stop words 去除还可以改成 TokenSources.getTokenStream(tpv,true); 进一步提速。
TokenStream tokenStream=TokenSources.getTokenStream(tpv);
//analyzer.tokenStream(FIELD_NAME,new StringReader(text));
String result =
highlighter.getBestFragments(
tokenStream,
text,
maxNumFragmentsRequired,
fragmentSeparator);
System.out.println("\t" + result);
}
}
最后把 highlight 包中的一个额外的判断去掉。对于中文来说没有明显的单词界限,所以下面这个判断是错误的:
tokenGroup.isDistinct(token)
这样中文分词就不会影响到查询速度了。
雨中漫步的太阳 2008-07-31 11:06
飘过,以前还真没注意到 呵呵
雨中漫步的太阳 2008-07-31 10:42
--引用--------------------------------------------------
jowo: 这种效率肯定差
--------------------------------------------------------
我这里简单做了测试,搜索分页的时候由于仅仅对10条信息处理 ,使用此方法和不使用此方法 时间上大致相差 10毫秒 具体和heiglight来比较的话 没有严格的比较, 但是我想heiglight还有通过分词器对比字典来先分词后replace的方式 不知道会比这个快多少, jowo 希望你有时间做个测试
雨中漫步的太阳 2008-07-31 10:39
--引用--------------------------------------------------
小龟爬爬: 博主 试没试过用替换字符串的办法
比如“博客园,程序员的家园”想要高亮显示“园”字
就可以用“<font color=red>园</font>”替换字符串里的“园”字就可以了……
--------------------------------------------------------
我文章里面说了 "有些朋友仅仅使用了套红也就是仅仅replaceall 那样会造成假如你的文本太长 你想substr的时候,很可能你的套红根本没有显示出来 原因很简单 被你cut掉了 呵呵 而这个就不会,可以避免上述情况."
雨中漫步的太阳 2008-07-31 08:42
@Birdshover
你做过测试么?
雨中漫步的太阳 2008-07-25 14:54
支持下 收藏了
雨中漫步的太阳 2008-07-23 09:12
速度还挺快 呵呵 飘过
雨中漫步的太阳 2008-07-22 09:27
这样 search的时候也要修改,否则会出现搜不匹配的问题
雨中漫步的太阳 2008-07-22 09:09
如果能提供安装语言来分类就更好了哦
雨中漫步的太阳 2008-07-22 09:05
好好好,三个字 非常好
雨中漫步的太阳 2008-07-21 11:52
@商纪刚
ok 已经发到你的邮箱了 晕 上面两个下载地址都不能下载么
雨中漫步的太阳 2008-07-20 18:21
@假正经哥哥
o(∩_∩)o... 周末了 发帖的人不多,但是愤青到不少啊.
雨中漫步的太阳 2008-07-20 17:40
自己测试后发现的确会提示下载人数过多,看来是qq网络硬盘限制了 我又提供一个下载地址 ,请使用下载地址2 进行下载
雨中漫步的太阳 2008-07-20 13:11
已经发到你指定的邮箱了 我这里就可以下载啊 并且速度还行
雨中漫步的太阳 2008-07-20 12:02
@zhuds
已经发到你的邮箱了
雨中漫步的太阳 2008-07-20 11:59
@Bēniaǒ
的确 你这个客户端 我也在用,但是我之所以做这个安装程序 主要是为了.net开发时候使用Oracle数据库,时候总是提示需要Oracle客户端支持,或者你再部署你的程序给客户时候,如果你还要你的客户去安装一个Oracle的客户端,那总是不太好, 你说的这个客户端软件是用java开发的 他连接Oracle的方式和.net不一样,其实我们平时如果使用java开发的仅仅需要三个jar包,直接使用netbeen 就可以
雨中漫步的太阳 2008-07-19 22:52
2~3M 不知道 真有那么小的么 不知道哦
雨中漫步的太阳 2008-07-19 22:43
setup.exe 就好了 vs2005 生成的安装程序 setup.exe 其实就是一个壳
雨中漫步的太阳 2008-07-19 22:26
提取码刚才忽略了,现在已经贴上去了
雨中漫步的太阳 2008-07-19 22:25
哦,对不起 我看看
雨中漫步的太阳 2008-07-19 22:17
自己测试了下 ,发现不能用迅雷下载
雨中漫步的太阳 2008-07-19 22:13
自己抢个沙发, 另外说明下, 安装完成后,需要在安装目录下面 根据提示修改tnsnames.ora
雨中漫步的太阳 2008-07-11 22:15
--引用-------------------------------------------------- gaga: var str="dasfdsafd"; var counters = []; var max = 0; for(var i=0;i<str.length;i++) { var charCode = charCodeAt(i); counters[charCode] = counters[charCode]? 1 : (counters[charCode]+1); if(counters[charCode]>max) max = counters[charCode]; } var theChar = string.fromCharCode(max);//出现最多的字符. --------------------------------------------------------
这个算是一种思路,不过代码需要修改后才能调试通过
雨中漫步的太阳 2008-07-04 14:37
你们找到合适的人员了么,如果没有可以考虑下我,呵呵,qq275287510
雨中漫步的太阳 2008-06-20 08:36
问题解决了 ,的确 因为Name.dct 是需要只读的,而Dict.dic是需要写权限的,而原来并没有给予写的权限
雨中漫步的太阳 2008-06-19 23:22
今天我也考虑到权限的问题了 但是比较郁闷的就是Name.dct 和Dict.dct在一个目录,为什么就能够加载成功
雨中漫步的太阳 2008-06-19 16:43
使用时出现了这样的问题 字典加载不上,但是那个name的字典就可以加载上去
2008-6-19 16:25:17 加载配置文件 F:\website\qg120.Web\KTDictSeg.xml success! :2008-6-19 16:25:17
2008-6-19 16:25:17 字典加载开始!:2008-6-19 16:25:17
2008-6-19 16:25:17 加载姓名字典 F:\website\qg120.Web\Data\Name.dct 开始! : 2008-6-19 16:25:17
2008-6-19 16:25:17 加载姓名字典 F:\website\qg120.Web\Data\Name.dct 成功! : 2008-6-19 16:25:17
2008-6-19 16:25:17 加载姓名字典 F:\website\qg120.Web\Data\Name.dct 结束! : 2008-6-19 16:25:17
2008-6-19 16:25:17 加载词典 F:\website\qg120.Web\Data\Dict.dct 开始! :2008-6-19 16:25:17
2008-6-19 16:25:17 加载词典 F:\website\qg120.Web\Data\Dict.dct error!!Errmsg:System.UnauthorizedAccessException: 对路径“F:\website\qg120.Web\Data\Dict.dct”的访问被拒绝。
在 System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
在 System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy)
在 System.IO.FileStream..ctor(String path, FileMode mode)
在 KTDictSeg.Dict.LoadFromBinFileEx(String fileName) : 2008-6-19 16:25:17
2008-6-19 16:25:17 加载词典 F:\website\qg120.Web\Data\Dict.dct 结束! : 2008-6-19 16:25:17
2008-6-19 16:25:17 所有的字典加载结束!:2008-6-19 16:25:17
雨中漫步的太阳 2008-06-05 09:09
哈哈不错,velocity 我早就在用
雨中漫步的太阳 2008-05-29 21:44
根据实际测试,当内存不是特别大的时候,尽可能的将ramDirectory的数量调小反而会加快索引的速度,我是使用java测试的,而我原来一直以为,RamDirectory缓存较多的Document的时候,可以最大限度的减少IO操作,片面的认为在内存中索引速度会快,但是java的测试和我想象正好相反,甚至有内存溢出的危险,这里我想可能是由于当缓存的Document越来越大的时候,java虚拟机需要频繁的去申请 释放更多的内存浪费了时间.java的内存控制搞的我有点头大,我本来设想监视jave的内存使用情况,根据内存的占用情况来设置缓存的大小,但是效果并不理想,甚至说是失败的.
雨中漫步的太阳 2008-05-29 21:36
没有用,不过你可以参考eaglet的一个文章,你去他的blog上找找
雨中漫步的太阳 2008-05-29 10:07
--引用--------------------------------------------------
王者归来: 这里有我的技术文章,欢迎大家来交流,并多多提出意见 。。
<a href="http://www.gzxk268.cn/" target="_new" rel="nofollow">http://www.gzxk268.cn/</a>
--------------------------------------------------------
鄙视 楼上广告贴
雨中漫步的太阳 2008-05-29 09:09
虽然没有字典,但是使用我以前改的那个字典,暂时可以当1.3的字典使用 呵呵
雨中漫步的太阳 2008-05-29 08:34
好耶,抢个沙发坐坐,最近天天再看java 的lucene,希望 把这个分词器移植到java版本中
雨中漫步的太阳 2008-05-28 08:24
来晚了 但是支持的态度不变 期待中
雨中漫步的太阳 2008-05-15 16:05
最近也在钻 设计模式 对网站框架设计 有了更多的认识,期待能够加入
雨中漫步的太阳 2008-05-09 19:09
--引用--------------------------------------------------
一抹微蓝: 很好很强大,收藏了;
我调试的时候直接对.html文件进行urlrewrite也是可以的,在生成的html没有过期之间直接访问.html,如果过期或者尚没有生成访问的时候生成.html,这样就可以视为是灵活的自动生成了吧,不是“手工”编译了。
终于找到一个完美方案,谢谢博主。
--------------------------------------------------------
确实是一个好的办法,以前我曾使用重定向错误页面的方式进行过类似的尝试,园主直接通过地址映射确实是一个好的办法.现在有一个问题就是,当大并发访问的时候,多人同时访问相同的页面,静态生成可能就会出现问题.其次楼上的说直接使用html映射,看起来确实网站更像一个静态站了,确实会节约服务器资源,但是你实际访问的还是aspx程序,还是会进行逻辑判断,这个还是会浪费服务器资源的.所以我建议还是使用先静态话的方式.但是那个方式会带来的弊端是我的动态页面可能由于静态话的需要无法正常的浏览,这个时候就可以借助地址映射的方式
雨中漫步的太阳 2008-05-07 09:03
支持下
雨中漫步的太阳 2008-05-06 08:46
@mian
我们用的是java版本 的lucene 网站 www.3156.cn
雨中漫步的太阳 2008-05-03 21:15
呵呵 前两天五一假期就没有仔细看你给我的代码 刚才看你的提示后又仔细看了代码 主要是自己根本没有仔细的看那个代码
const String MY_XML_CFG_PATH = @"foctory.xml";
这里你写的是foctory.xml 我的xml文件名称是 factory.xml
非常感谢你的耐心的解答
雨中漫步的太阳 2008-05-01 12:07
我完全按照你上面发的代码得到的结果为什么还是0
雨中漫步的太阳 2008-04-28 20:29
我的xml文件 如下
<?xml version="1.0" encoding="utf-8"?>
<factory xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance">
<Depend name="AdsSqlMap"
Interface="qg120.Persistence.Interfaces.IAdsSqlMapDao,qg120.Persistence"
Implement="qg120.Persistence.SqlMapDao.AdsSqlMapDao,qg120.Persistence">
</Depend>
</factory>
我写的类文件如下
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml.Serialization;
using ConfigurationPattern;
namespace CfgSample
{
[ConfigurationPattern(TPattern.XML)]
public class factory: Configuration
{
const String MY_XML_CFG_PATH = @"foctory.xml";
public factory()
: base(MY_XML_CFG_PATH)
{
}
private IList<Depend> dependField = new List<Depend>();
#region Public Propertys
public IList<Depend> Depends
{
get
{
return this.dependField;
}
set
{
this.dependField = value;
}
}
#endregion
}
[ConfigurationPattern(TPattern.XML)]
public class Depend
{
private string nameField;
private string interfaceField;
private string implementField;
public string name
{
get
{
return this.nameField;
}
set
{
this.nameField = value;
}
}
public string Interface
{
get
{
return this.interfaceField;
}
set
{
this.interfaceField = value;
}
}
public string Implement
{
get
{
return this.implementField;
}
set
{
this.implementField = value;
}
}
}
}
程序调用如下
factory factory = new factory();
factory.ReadOnly = true;
factory.Open();
Console.WriteLine(String.Format("Factory:{0}", factory.Depends.Count));
我对xml不是很熟 我知道我的类 写的有问题,因为结果一直不对 ,所以麻烦你帮忙看看 这样的配置文件应该怎么写这个类文件接口
雨中漫步的太阳 2008-04-27 15:01
刚才我看IOC( Inversion of Control ) 的相关定义,不知道我上面的实现是不是有点IOC的雏形呢 嘿嘿
雨中漫步的太阳 2008-04-27 14:25
做个标记
雨中漫步的太阳 2008-04-21 17:53
能给我也发一份代码看看么 suyuan19@gmail.com
雨中漫步的太阳 2008-04-21 16:03
这个原因是由于字典文件中 分别存在 "中国" "人民" "中国人民" 三个词
而程序中使用的是 最大匹配算法
List words = m_ExtractWords.ExtractFullTextMaxMatch(word);
所以就得到了你说的那个情况