﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Easy Net (Lucene &amp;&amp; SOA)-随笔分类-Lucene 2.1研究</title><link>http://www.blogjava.net/Liangtianyu/category/23267.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 26 Dec 2007 07:12:24 GMT</lastBuildDate><pubDate>Wed, 26 Dec 2007 07:12:24 GMT</pubDate><ttl>60</ttl><item><title>Lucene 2.1研究：发布NLucene-2.1</title><link>http://www.blogjava.net/Liangtianyu/archive/2007/12/26/170446.html</link><dc:creator>Terry Liang</dc:creator><author>Terry Liang</author><pubDate>Wed, 26 Dec 2007 00:38:00 GMT</pubDate><guid>http://www.blogjava.net/Liangtianyu/archive/2007/12/26/170446.html</guid><wfw:comment>http://www.blogjava.net/Liangtianyu/comments/170446.html</wfw:comment><comments>http://www.blogjava.net/Liangtianyu/archive/2007/12/26/170446.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/Liangtianyu/comments/commentRss/170446.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Liangtianyu/services/trackbacks/170446.html</trackback:ping><description><![CDATA[<p>发布个人修改的基于.Net 3.5的Lucene 2.1版本，经过测试，也在实际项目中应用过，如有需要请发邮件给我：<a href="mailto:liangtianyu@gmail.com">liangtianyu@gmail.com</a>。</p>
<img src ="http://www.blogjava.net/Liangtianyu/aggbug/170446.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Liangtianyu/" target="_blank">Terry Liang</a> 2007-12-26 08:38 <a href="http://www.blogjava.net/Liangtianyu/archive/2007/12/26/170446.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Lucene 2.1研究：对字符的判断</title><link>http://www.blogjava.net/Liangtianyu/archive/2007/07/02/127415.html</link><dc:creator>Terry Liang</dc:creator><author>Terry Liang</author><pubDate>Mon, 02 Jul 2007 00:14:00 GMT</pubDate><guid>http://www.blogjava.net/Liangtianyu/archive/2007/07/02/127415.html</guid><wfw:comment>http://www.blogjava.net/Liangtianyu/comments/127415.html</wfw:comment><comments>http://www.blogjava.net/Liangtianyu/archive/2007/07/02/127415.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/Liangtianyu/comments/commentRss/127415.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Liangtianyu/services/trackbacks/127415.html</trackback:ping><description><![CDATA[下面是我总结出来的Lucene中对字符类型的判断正则表达式：<br><br>用于判断Unicode Letter：<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String UnicodeLetterPattern = "[(\u0041-\u005a)|(\u0061-\u007a)|(\u00c0-\u00d6)|(\u00d8-\u00f6)|(\u00f8-\u00ff)|(\u0100-\u1fff)]";<br><br>用于判断亚洲语言字符（中国，日本，韩国）：<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String UnicodeCJPattern = "[(\u3040-\u318f)|(\u3300-\u337f)|(\u3400-\u3d2d)|(\u4e00-\u9fff)|(\uf900-\ufaff)|(\uac00-\ud7af)]";<br><br>用于判断Unicode中的数字：<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String UnicodeDigitPattern = "[(\u0030-\u0039)|(\u0660-\u0669)|(\u06f0-\u06f9)|(\u0966-\u096f)|(\u09e6-\u09ef)|(\u0a66-\u0a6f)|(\u0ae6-\u0aef)|(\u0b66-\u0b6f)|(\u0be7-\u0bef)|(\0c66-\u0c6f)|(\u0ce6-\u0cef)|(\u0d66-\u0d6f)|(\u0e50-\u0e59)|(\u0ed0-\u0ed9)|(\u1040-\u1049)]";
<img src ="http://www.blogjava.net/Liangtianyu/aggbug/127415.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Liangtianyu/" target="_blank">Terry Liang</a> 2007-07-02 08:14 <a href="http://www.blogjava.net/Liangtianyu/archive/2007/07/02/127415.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Lucene 2.1研究：检索</title><link>http://www.blogjava.net/Liangtianyu/archive/2007/06/20/125373.html</link><dc:creator>Terry Liang</dc:creator><author>Terry Liang</author><pubDate>Wed, 20 Jun 2007 08:50:00 GMT</pubDate><guid>http://www.blogjava.net/Liangtianyu/archive/2007/06/20/125373.html</guid><wfw:comment>http://www.blogjava.net/Liangtianyu/comments/125373.html</wfw:comment><comments>http://www.blogjava.net/Liangtianyu/archive/2007/06/20/125373.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/Liangtianyu/comments/commentRss/125373.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Liangtianyu/services/trackbacks/125373.html</trackback:ping><description><![CDATA[<p><span>检索前，需要对检索字符串进行分析，这是由</span><span>QueryParser</span><span>来完成的。为了保证查询的正确性，最好用创建索引文件时同样的分析器。</span><span>QueryParser</span><span>解析字符串时，可以指定查询域，实际可以在字符串中指定一个或多个域。例如：&#8220;</span><span>Info:</span><span>电视台</span><span> AND ID:<st1:chmetcnv TCSC="0" NumberType="1" Negative="False" HasSpace="False" SourceValue="3329" UnitName="&#8221;" w:st="on">3329<span><span>&#8221;</span></span></st1:chmetcnv><span>，&#8220;</span>Info:</span><span>电视台&#8221;，&#8220;电视台&#8221;，假如不指定默认域，就会在默认域查询。</span></p>
<p>&nbsp;</p>
<p><span>QueryParser</span><span>调用静态方法</span><span>Parse</span><span>后会返回</span><span>Query</span><span>的实例，原子查询。例如：&#8220;</span><span>Info:</span><span>电视台</span><span> AND ID:<st1:chmetcnv TCSC="0" NumberType="1" Negative="False" HasSpace="False" SourceValue="3329" UnitName="&#8221;" w:st="on">3329<span><span>&#8221;</span></span></st1:chmetcnv><span>会返回</span>BooleanQuery</span><span>，&#8220;</span><span>Info:</span><span>电视台&#8221;或&#8220;电视台&#8221;会返回</span><span>PhraseQuery</span><span>，&#8220;台&#8221;会返回</span><span>TermQuery</span><span>。</span></p>
<p>&nbsp;</p>
<p><span>Lucene</span><span>内建</span><span>Query</span><span>对象：</span></p>
<p>&nbsp;</p>
<p><span>TermQuery</span><span>：词条查询。通过对某个词条的指定，实现检索索引中存在该词条的所有文档。</span></p>
<p><span>BooleanQuery</span><span>：布尔查询。</span><span>Lucene</span><span>中包含逻辑关系：&#8220;与&#8221;，&#8220;或&#8221;，&#8220;非&#8221;的复杂查询，最终都会表示成</span><span>BooleanQuery</span><span>。布尔查询就是一个由多个子句和子句之间组成的布尔逻辑所组成的查询。</span></p>
<p><span>RangeQuery</span><span>：范围查询。这种范围可以是日期，时间，数字，大小等等。</span></p>
<p><span>PrefixQuery</span><span>：前缀查询。</span></p>
<p><span>PhraseQuery</span><span>：短语查询。默认为完全匹配，但可以指定坡度（</span><span>Slop</span><span>，默认为</span><span>0</span><span>）改变范围。比如</span><span>Slop=1</span><span>，检索短语为&#8220;电台&#8221;，那么在&#8220;电台&#8221;中间有一个字的也可以被查找出来，比如&#8220;电视台&#8221;。</span></p>
<p><span>MultiPhraseQuery</span><span>：多短语查询。</span></p>
<p><span>FuzzyQuery</span><span>：模糊查询。模糊查询使用的匹配算法是</span><span>levenshitein</span><span>算法。此算法在比较两个字符串时，将动作分为</span><span>3</span><span>种：加一个字母（</span><span>Insert</span><span>），删一个字母（</span><span>Delete</span><span>），改变一个字母（</span><span>Substitute</span><span>）。</span></p>
<p><span>WildcardQuery</span><span>：通配符查询。&#8220;</span><span>*</span><span>&#8221;号表示</span><span>0</span><span>到多个字符，&#8220;？&#8221;表示单个字符。</span></p>
<p><span>SpanQuery</span><span>：跨度查询。此类为抽象类。</span></p>
<p><span>SpanTermQuery</span><span>：检索效果完全同</span><span>TermQuery</span><span>，但内部会记录一些位置信息，供</span><span>SpanQuery</span><span>的其它</span><span>API</span><span>使用，是其它属于</span><span>SpanQuery</span><span>的</span><span>Query</span><span>的基础。</span></p>
<p><span>SpanFirstQuery</span><span>：查找方式为从</span><span>Field</span><span>的内容起始位置开始，在一个固定的宽度内查找所指定的词条。</span></p>
<p><span>SpanNearQuery</span><span>：功能类似</span><span>PharaseQuery</span><span>。</span><span>SpanNearQuery</span><span>查找所匹配的不一定是短语，还有可能是另一个</span><span>SpanQuery</span><span>的查询结果作为整体考虑，进行嵌套查询。</span></p>
<p><span>SpanOrQuery</span><span>：把所有</span><span>SpanQuery</span><span>查询结果综合起来，作为检索结果。</span></p>
<p><span>SpanNotQuery</span><span>：从第一个</span><span>SpanQuery</span><span>查询结果中，去掉第二个</span><span>SpanQuery</span><span>查询结果，作为检索结果。</span></p>
<p>&nbsp;</p>
<p><span>BooleanClause</span><span>用于表示布尔查询子句关系的类，包括：</span><span>BooleanClause.Occur.MUST</span><span>，</span><span>BooleanClause.Occur.MUST_NOT</span><span>，</span><span>BooleanClause.Occur.SHOULD</span><span>。有以下</span><span>6</span><span>种组合：</span></p>
<p><span><span>1．</span></span><span>MUST</span><span>和</span><span>MUST</span><span>：取得连个查询子句的交集。</span></p>
<p><span><span>2．</span></span><span>MUST</span><span>和</span><span>MUST_NOT</span><span>：表示查询结果中不能包含</span><span>MUST_NOT</span><span>所对应得查询子句的检索结果。</span></p>
<p><span><span>3．</span></span><span>MUST_NOT</span><span>和</span><span>MUST_NOT</span><span>：无意义，检索无结果。</span></p>
<p><span><span>4．</span></span><span>SHOULD</span><span>与</span><span>MUST</span><span>、</span><span>SHOULD</span><span>与</span><span>MUST_NOT</span><span>：</span><span>SHOULD</span><span>与</span><span>MUST</span><span>连用时，无意义，结果为</span><span>MUST</span><span>子句的检索结果。与</span><span>MUST_NOT</span><span>连用时，功能同</span><span>MUST</span><span>。</span></p>
<p><span><span>5．</span></span><span>SHOULD</span><span>与</span><span>SHOULD</span><span>：表示&#8220;或&#8221;关系，最终检索结果为所有检索子句的并集。</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<img src ="http://www.blogjava.net/Liangtianyu/aggbug/125373.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Liangtianyu/" target="_blank">Terry Liang</a> 2007-06-20 16:50 <a href="http://www.blogjava.net/Liangtianyu/archive/2007/06/20/125373.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Lucene 2.1研究：文件存储</title><link>http://www.blogjava.net/Liangtianyu/archive/2007/06/14/124321.html</link><dc:creator>Terry Liang</dc:creator><author>Terry Liang</author><pubDate>Thu, 14 Jun 2007 06:45:00 GMT</pubDate><guid>http://www.blogjava.net/Liangtianyu/archive/2007/06/14/124321.html</guid><wfw:comment>http://www.blogjava.net/Liangtianyu/comments/124321.html</wfw:comment><comments>http://www.blogjava.net/Liangtianyu/archive/2007/06/14/124321.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/Liangtianyu/comments/commentRss/124321.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Liangtianyu/services/trackbacks/124321.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp; Lucene 2.10索引文件：Term：项。为分词后最小单位，具体和使用的分析器有关，Lucene内置为单字。Field：域。相当于数据库表的字段。Document：文档。域信息的集合。Segment：段。一个完整定1索引。&nbsp;                                    文件名称          ...&nbsp;&nbsp;<a href='http://www.blogjava.net/Liangtianyu/archive/2007/06/14/124321.html'>阅读全文</a><img src ="http://www.blogjava.net/Liangtianyu/aggbug/124321.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Liangtianyu/" target="_blank">Terry Liang</a> 2007-06-14 14:45 <a href="http://www.blogjava.net/Liangtianyu/archive/2007/06/14/124321.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Lucene 2.1研究：倒排序基本常识</title><link>http://www.blogjava.net/Liangtianyu/archive/2007/06/11/123281.html</link><dc:creator>Terry Liang</dc:creator><author>Terry Liang</author><pubDate>Mon, 11 Jun 2007 00:14:00 GMT</pubDate><guid>http://www.blogjava.net/Liangtianyu/archive/2007/06/11/123281.html</guid><wfw:comment>http://www.blogjava.net/Liangtianyu/comments/123281.html</wfw:comment><comments>http://www.blogjava.net/Liangtianyu/archive/2007/06/11/123281.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/Liangtianyu/comments/commentRss/123281.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Liangtianyu/services/trackbacks/123281.html</trackback:ping><description><![CDATA[倒排文件（Inverted file）描述了一个词项集合（TERMS）元素和一个文档集合（DOCS）元素对应关系的数据结构。在倒排文件中，可以直接给出一个Term出现在哪些Document中，和在某个Document中出现的位置和频率。在Lucene 2.1中InvertDoucment会对文档进行倒排处理。<br>下面是信息检索研究中常用的几个相关量：<br>&nbsp;
<p><span>N</span><span>：文档集合的大小</span></p>
<p><span>M</span><span>：词项集合的大小</span></p>
<p><span>S<sub>j</sub>=|PL</span><span>（</span><span>t<sub>j</sub></span><span>）</span><span>|</span><span>：词项</span><span>t<sub>j</sub></span><span>所涉及文档的个数</span></p>
<p><span>DF</span><span>（</span><span>t<sub>j</sub></span><span>）</span><span>=s<sub>j</sub>/N</span><span>：词项</span><span>t<sub>j</sub></span><span>的文档频率</span></p>
<p><span>IDF</span><span>（</span><span>t<sub>j</sub></span><span>）</span><span>=-logDF</span><span>（</span><span>t<sub>j</sub></span><span>）：倒置文档频率；其值越小表示出现的频率越高</span></p>
<p><span>f<sub>i,j</sub></span><span>：第</span><span>j</span><span>个词项</span><span>t<sub>j</sub></span><span>在第</span><span>i</span><span>个文档</span><span>d<sub>i</sub></span><span>中出现的次数</span></p>
<p><span>T<sub>N</sub></span><span>=<img style="WIDTH: 26px; HEIGHT: 47px" height=47 alt="" src="http://www.blogjava.net/images/blogjava_net/liangtianyu/image001.gif" width=26 border=0><span> <img height=39 alt="" src="http://www.blogjava.net/images/blogjava_net/liangtianyu/image002.gif" width=21 border=0></span>f<sub>i,j</sub></span><span>：系统所有文档分解后包含词项的总量（包括重复，即一个多重集（<span>multi-set</span>））</span></p>
<p><span>TF</span><span>（<span>t<sub>j</sub></span>）<span>=</span>（<img height=34 alt="" src="http://www.blogjava.net/images/blogjava_net/liangtianyu/image003.gif" width=22 border=0><span><span> </span>f<sub>i</sub></span><sub>，<span>j</span></sub>）<span>/T<sub>N</sub></span>：词项<span>t<sub>j</sub></span>在文档中出现的频度（词频）</span></p>
<p><span>ITF</span><span>（<span>t<sub>j</sub></span>）<span>=logTF</span>（<span>t<sub>j</sub></span>）：倒置词频；越小表示出现的频率越高</span></p>
倒排文件分为两部分：第一部分是由不同词项组成的索引，称为词表（Vocabulary），第二部分由每个词项出现过的文档集合构成，称为记录文件（Posting File），每个词项的对应部分称为倒排表（Posting Lists），可以通过词表访问。 
<img src ="http://www.blogjava.net/Liangtianyu/aggbug/123281.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Liangtianyu/" target="_blank">Terry Liang</a> 2007-06-11 08:14 <a href="http://www.blogjava.net/Liangtianyu/archive/2007/06/11/123281.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Lucene 2.1研究：索引文件格式说明</title><link>http://www.blogjava.net/Liangtianyu/archive/2007/06/08/122757.html</link><dc:creator>Terry Liang</dc:creator><author>Terry Liang</author><pubDate>Fri, 08 Jun 2007 00:07:00 GMT</pubDate><guid>http://www.blogjava.net/Liangtianyu/archive/2007/06/08/122757.html</guid><wfw:comment>http://www.blogjava.net/Liangtianyu/comments/122757.html</wfw:comment><comments>http://www.blogjava.net/Liangtianyu/archive/2007/06/08/122757.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/Liangtianyu/comments/commentRss/122757.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Liangtianyu/services/trackbacks/122757.html</trackback:ping><description><![CDATA[经过大半个月的努力，终于完成了Lucene.Net 2.1版本的改造。经测试可以完全兼容Java版，生成的索引文件与Java版的完全一样，查询效率很高，不过建立索引的效率相对很低。当然，下一步我会针对相关问题进行改进。<br><br>segment：代表一个完整的索引段<br>.fnm：Document中所有Field的信息，在FieldInfos中写入<br>.fdt：存储具有Store.YES属性的Field的数据，包括：数量，编号和长度<br>.fdx：存储Document在.fdt中的位置<br>.tis：存储分词后的词条（Term）<br>.tii：tis文件的索引文件，表明了每个tis文件中的词条的位置<br>.cfs：复合索引文件。建立索引时假如采取符合模式，则以上所有文件都回存储在.cfs文件中 
<img src ="http://www.blogjava.net/Liangtianyu/aggbug/122757.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Liangtianyu/" target="_blank">Terry Liang</a> 2007-06-08 08:07 <a href="http://www.blogjava.net/Liangtianyu/archive/2007/06/08/122757.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>基于Lucene 2.1研究：时间的处理</title><link>http://www.blogjava.net/Liangtianyu/archive/2007/05/17/118043.html</link><dc:creator>Terry Liang</dc:creator><author>Terry Liang</author><pubDate>Thu, 17 May 2007 04:00:00 GMT</pubDate><guid>http://www.blogjava.net/Liangtianyu/archive/2007/05/17/118043.html</guid><wfw:comment>http://www.blogjava.net/Liangtianyu/comments/118043.html</wfw:comment><comments>http://www.blogjava.net/Liangtianyu/archive/2007/05/17/118043.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/Liangtianyu/comments/commentRss/118043.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Liangtianyu/services/trackbacks/118043.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;Java版的Lucene对时间的处理和.Net版中的有很大不同，下面我给出<strong>org.apache.lucene.document</strong>包下<strong>DateTools</strong>类的.Net完整实现。<br>&nbsp;&nbsp;&nbsp;public class DateTools<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private static readonly string YEAR_FORMAT = "yyyy";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private static readonly string MONTH_FORMAT = "yyyyMM";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private static readonly string DAY_FORMAT = "yyyyMMdd";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private static readonly string HOUR_FORMAT = "yyyyMMddHH";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private static readonly string MINUTE_FORMAT = "yyyyMMddHHmm";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private static readonly string SECOND_FORMAT = "yyyyMMddHHmmss";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private static readonly string MILLISECOND_FORMAT = "yyyyMMddHHmmssfff";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static readonly DateTime BASE_UNIVERSAL_TIME = DateTime.Parse("January 1, 1970, 00:00:00 GMT").ToUniversalTime();</p>
<p>&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static string TimeToString(long l, Resolution resolution)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DateTime dt = LongToDateTime(l);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string result = string .Empty ;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; switch (resolution)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case Resolution.YEAR:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result = dt.ToString(YEAR_FORMAT);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case Resolution.MONTH:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result = dt.ToString(MONTH_FORMAT);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case Resolution.DAY:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result = dt.ToString(DAY_FORMAT);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case Resolution.HOUR:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result = dt.ToString(HOUR_FORMAT);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case Resolution.MINUTE:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result = dt.ToString(MINUTE_FORMAT);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case Resolution.SECOND:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result = dt.ToString(SECOND_FORMAT);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case Resolution.MILLISECOND:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result = dt.ToString(MILLISECOND_FORMAT);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return result;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static string TimeToString(DateTime time, Resolution resolution)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return TimeToString(DateTimeToLong(time), resolution);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static long Round(long time, Resolution resolution)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DateTime dt = BASE_UNIVERSAL_TIME.AddMilliseconds(time).ToUniversalTime();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; switch (resolution)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case Resolution.YEAR:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dt = dt.AddMonths(1 - dt.Month).AddDays(1 - dt.Day).AddHours(0 - dt.Hour).AddMinutes(0 - dt.Minute).AddSeconds(0 - dt.Second).AddMilliseconds(0 - dt.Millisecond);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case Resolution.MONTH:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dt = dt.AddDays(1 - dt.Day).AddHours(0 - dt.Hour).AddMinutes(0 - dt.Minute).AddSeconds(0 - dt.Second).AddMilliseconds(0 - dt.Millisecond);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case Resolution.DAY:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dt = dt.AddHours(0 - dt.Hour).AddMinutes(0 - dt.Minute).AddSeconds(0 - dt.Second).AddMilliseconds(0 - dt.Millisecond);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case Resolution.HOUR:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dt = dt.AddMinutes(0 - dt.Minute).AddSeconds(0 - dt.Second).AddMilliseconds(0 - dt.Millisecond);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case Resolution.MINUTE:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dt = dt.AddSeconds(0 - dt.Second) .AddMilliseconds(0 - dt.Millisecond);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case Resolution.SECOND:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dt = dt.AddMilliseconds(0 - dt.Millisecond);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case Resolution.MILLISECOND:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return DateTimeToLong(dt);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static DateTime Round(DateTime date, Resolution resolution)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return LongToDateTime(Round(DateTimeToLong(date), resolution));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static long DateTimeToLong(DateTime time)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return (long)(time.ToUniversalTime() - BASE_UNIVERSAL_TIME).TotalMilliseconds;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static DateTime LongToDateTime(long l)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return BASE_UNIVERSAL_TIME.AddMilliseconds(l).ToUniversalTime();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public enum Resolution<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; YEAR,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MONTH,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DAY,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HOUR,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MINUTE,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SECOND,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MILLISECOND<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<br></p>
<img src ="http://www.blogjava.net/Liangtianyu/aggbug/118043.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Liangtianyu/" target="_blank">Terry Liang</a> 2007-05-17 12:00 <a href="http://www.blogjava.net/Liangtianyu/archive/2007/05/17/118043.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>基于Lucene 2.1的研究：Lucene.Net版本Bug修改</title><link>http://www.blogjava.net/Liangtianyu/archive/2007/05/15/117656.html</link><dc:creator>Terry Liang</dc:creator><author>Terry Liang</author><pubDate>Tue, 15 May 2007 09:16:00 GMT</pubDate><guid>http://www.blogjava.net/Liangtianyu/archive/2007/05/15/117656.html</guid><wfw:comment>http://www.blogjava.net/Liangtianyu/comments/117656.html</wfw:comment><comments>http://www.blogjava.net/Liangtianyu/archive/2007/05/15/117656.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/Liangtianyu/comments/commentRss/117656.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Liangtianyu/services/trackbacks/117656.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Lucene.Net 2.1版本还没有正式发布，但可以从SVN中下载获得。在此版本中，当对Java版本建立的索引文档进行搜索时，会有异常抛出。经过我调试和对比，发现是因为Java中Long.parseLong(String s，int radix)，Long.toString(long i，int radix)与.Net中的Convert.ToInt64(String，int32)，Convert.ToString(int64，int32)是不同的。具体差异请查找相关文档，下面我只给出解决方案。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在Lucene.Net 2.1工程中的SupportClass.cs中添加如下代码：<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//实现Java的Long.parseLong(String s，int radix)<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public static Int64 ConvertToInt64(string s, int fromBase)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Int64 result = 0;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = (s.Length-1),j=0; i &gt;=0; i--,j++)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char ch = char.ToLower(s[i]);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int v = char.IsDigit(ch)==true?int.Parse(ch.ToString()):(10+(int)(ch-'a'));</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result = result + Convert.ToInt64(v * Math.Pow(fromBase, j));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return result;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//实现Java的Long.toString(long i，int radix)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public static string ConvertToString(long l, int fromBase)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int maxP =(int) Math.Floor(Math.Log(l,fromBase));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int maxN = (int)Math.Floor(l / Math.Pow(fromBase, maxP));</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char[] chs = new char[maxP+1];</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chs[0] = (maxN &gt;= 0 &amp;&amp; maxN &lt;= 9) ? char.Parse(maxN.ToString()) : (char)((int)('a')+(maxN - 10));</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;long n1 = (long)(l - maxN*Math.Pow(fromBase, maxP));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;long temp=n1;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = (maxP-1),j=1; i &gt;= 0;i--,j++)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int n2 = (int)Math.Floor(temp/Math.Pow(fromBase,i));</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chs[j]=(n2&gt;=0 &amp;&amp; n2&lt;=9)?char.Parse(n2.ToString()):(char)((int)('a')+(n2-10));</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; temp=(long)(temp-n2*Math.Pow(fromBase,i));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return new string(chs);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这样替换Lucene.Net中的相关代码，就可以了。而且经过测试，发现.Net版本的查询速度比Java版本的快很多，很搞不清楚。</p>
<img src ="http://www.blogjava.net/Liangtianyu/aggbug/117656.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Liangtianyu/" target="_blank">Terry Liang</a> 2007-05-15 17:16 <a href="http://www.blogjava.net/Liangtianyu/archive/2007/05/15/117656.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Lucene数据索引搜索示例</title><link>http://www.blogjava.net/Liangtianyu/archive/2007/04/30/114815.html</link><dc:creator>Terry Liang</dc:creator><author>Terry Liang</author><pubDate>Mon, 30 Apr 2007 08:43:00 GMT</pubDate><guid>http://www.blogjava.net/Liangtianyu/archive/2007/04/30/114815.html</guid><wfw:comment>http://www.blogjava.net/Liangtianyu/comments/114815.html</wfw:comment><comments>http://www.blogjava.net/Liangtianyu/archive/2007/04/30/114815.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/Liangtianyu/comments/commentRss/114815.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Liangtianyu/services/trackbacks/114815.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;平台：Lucene 2.1.0，JRE 1.4，Oracle 10g，IBM Web Sphere。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;数据表：Article。字段：ID（自动增长），Title（String），Content（String）。共有550000条记录。&nbsp;&nbsp;...&nbsp;&nbsp;<a href='http://www.blogjava.net/Liangtianyu/archive/2007/04/30/114815.html'>阅读全文</a><img src ="http://www.blogjava.net/Liangtianyu/aggbug/114815.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Liangtianyu/" target="_blank">Terry Liang</a> 2007-04-30 16:43 <a href="http://www.blogjava.net/Liangtianyu/archive/2007/04/30/114815.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>