<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>lucene爱好者</title>
    <description>lucene爱好者</description>
    <link>http://lucene-group.group.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
          <item>
        <title>Lucene實戰開發手記(七）--- 關鍵詞提示</title>
        <author>cleaneyes</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://cleaneyes.javaeye.com">cleaneyes</a>&nbsp;
                    链接：<a href="http://lucene-group.group.javaeye.com/group/blog/193309" style="color:red;">http://lucene-group.group.javaeye.com/group/blog/193309</a>&nbsp;
          发表时间: 2008年05月15日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;有點類似google搜索關鍵詞提示的功能。用Ajax的方式，提示以所輸入文字開頭的前10個lucene已創建的關鍵詞。</p>
<p>Ajax和頁面代碼省略掉，隻貼與lucene相關的代碼。</p>
<p>&nbsp;</p>
<pre name="code" class="java">	/**
	 * 關鍵詞提醒
	 * @param keyword
	 * @return
	 */
	public List remindKeyword(String keyword){
		List keywordList = new ArrayList();
		IndexReader indexReader;
		try {
			File indexDir = new File(INDEX_STORE_PATH);
			if (indexDir.exists()){
				indexReader = IndexReader.open(INDEX_STORE_PATH);
				
				//以輸入的文字開頭,搜索contents的關鍵詞
				Term sterm = new Term("contents",keyword);				
		        TermEnum termEnum = indexReader.terms(sterm);
		       
		        while (true){
		        	Term term = termEnum.term();		        	
		        	if (term == null || (!term.text().startsWith(keyword))){
		        		break;
		        	}
		        	//關鍵詞出現的位置
		        	TermPositions termPositions = indexReader.termPositions(term);	
		        	//關鍵詞出現的頻率
		        	int frq = termPositions.freq();
		        	while (termPositions.next()){
		        		frq = frq + termPositions.freq();
		           	}		
		        	if (frq &gt;0){
		        		Map keyElt = new HashMap();
			        	keyElt.put("KEY", term.text());
			        	keyElt.put("VALUE", String.valueOf(frq));		
			        	//System.out.println(term.text()+":"+frq);
			        	keywordList.add(keyElt);
		        	}        			        	
		        	termEnum.next();
		        }		        
		        
		       //略掉了對標題部分關鍵詞的搜索			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			throw new LuceneException();
		}
		
		//依出現次數排序
		Comparator&lt;Map&gt; itemComparator = new Comparator&lt;Map&gt;()
		{ 
			public int compare(Map a, Map b)
			{ 
				return Integer.valueOf((String)a.get("VALUE")).intValue() - Integer.valueOf((String)b.get("VALUE")).intValue();
			}
		};
		Collections.sort(keywordList, Collections.reverseOrder(itemComparator));
		
		int maxSize = keywordList.size();
		if (maxSize &gt; 10) maxSize = 10;
		keywordList = keywordList.subList(0, maxSize);
		
		return keywordList;
	}</pre>
<p>&nbsp;</p>
<p>我的系列文章到此各一段落。目前要轉向其他功能的開發，對lucene的學習也隻能停留在這裡了。還有一個很大的問題就是怎麼把lucene的索引存在數據庫裡，簡單了解一下compass，好像也不是很好使，沒有原本的lucene靈活。望有高手指點。</p>
<p>對Lucene一點淺薄的了解，謝謝光臨！</p>
          <br/>
          <span style="color:red;">
            <a href="http://lucene-group.group.javaeye.com/group/blog/193309#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 15 May 2008 15:41:37 +0800</pubDate>
        <link>http://lucene-group.group.javaeye.com/group/blog/193309</link>
        <guid>http://lucene-group.group.javaeye.com/group/blog/193309</guid>
      </item>
          <item>
        <title>Lucene實戰開發手記(六）--- 搜索、刪除索引代碼</title>
        <author>cleaneyes</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://cleaneyes.javaeye.com">cleaneyes</a>&nbsp;
                    链接：<a href="http://lucene-group.group.javaeye.com/group/blog/193307" style="color:red;">http://lucene-group.group.javaeye.com/group/blog/193307</a>&nbsp;
          发表时间: 2008年05月15日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>無特別之處，了解的朋友不用看。</p>
<pre name="code" class="java">	
	/**
	 * 限制分類的搜索
	 * @param keyword
	 * @param categoryKeyword
	 * @return
	 * @throws LuceneException
	 */
	public  List searchIndex(String keyword, String categoryKeyword) throws LuceneException{
		Analyzer analyzer = new CJKAnalyzer();
		
		BooleanQuery query = new BooleanQuery();
		BooleanClause.Occur[] flags = new BooleanClause.Occur[]{BooleanClause.Occur.SHOULD, BooleanClause.Occur.SHOULD};
		try {
			Query multiQuery = MultiFieldQueryParser.parse(keyword, new String[] {
			        "topic", "contents" }, flags, analyzer);
			query.add(multiQuery, BooleanClause.Occur.MUST);
			QueryParser parse = new QueryParser("categoryId",analyzer);
			query.add(parse.parse(categoryKeyword), BooleanClause.Occur.MUST);//注意QueryParser是個很聰明的家伙，能自動判別你想要的Query的具體類型
			
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();			
			throw new LuceneException();
		}
		return searchIndex(query);
	}
	
	/**
	 * 搜索的實際執行方法，未做分頁
	 * @param query
	 * @return
	 * @throws LuceneException
	 */
	public  List searchIndex(Query query) throws LuceneException{
		
		List&lt;KbIndexModel&gt; resultList = new ArrayList&lt;KbIndexModel&gt;();
		File indexDir = new File(INDEX_STORE_PATH);
		Analyzer analyzer = new CJKAnalyzer();
		IndexSearcher indexSearcher;
		
		if (indexDir.exists() == false){
			return resultList;
		}
		
		try {
			indexSearcher = new IndexSearcher(IndexReader.open(indexDir));		
	        System.out.println("\nQuery:"+query.toString()+"--------------------");		

			Hits hits = indexSearcher.search(query);
			
			//高亮顯示設置
			SimpleHTMLFormatter simpleHTMLFormatter = new SimpleHTMLFormatter(
	                "&lt;span class=\"searchcontent\"&gt;", "&lt;/span&gt;");
			Highlighter highlighter = new Highlighter(simpleHTMLFormatter,new QueryScorer(query));
			highlighter.setTextFragmenter(new SimpleFragmenter(CONTENTS_SHOW_LENGTH));
			
			
			for (int i = 0; i &lt; hits.length() &amp;&amp; i &lt; MAX_RESULT; i++)
			{
				Document doc = hits.doc(i);
				KbIndexModel resultModel = new KbIndexModel();
				resultModel.setId(doc.get("id"));
				resultModel.setArticleId(doc.get("articleId"));
				resultModel.setFileName(doc.get("fileName"));				
				resultModel.setCategory(doc.get("category"));
				
				String topic = doc.get("topic");
				//高亮顯示
				TokenStream tokenStream = analyzer.tokenStream("topic", new StringReader(topic));
				String topic2 = highlighter.getBestFragment(tokenStream, topic);
				if (topic2 == null){
					topic2 = topic;
				}
				resultModel.setTopic(topic2);				
				//後面的代碼無關緊要
				String contents = hits.doc(i).get("contents");				
				
				tokenStream = analyzer.tokenStream("contents", new StringReader(contents));
				String contents2 = highlighter.getBestFragment(tokenStream, contents);
				
				if(contents2 == null){
					if (contents == null){
						contents2 = "";
					}
					else if (contents.length() &gt; CONTENTS_SHOW_LENGTH){
						contents2 = contents.substring(0, CONTENTS_SHOW_LENGTH);
					}	
					else{
						contents2 = contents;
					}					
				}		
				
				resultModel.setContents(contents2 + "...");

				resultModel.setIndex(i+1);
				resultList.add(resultModel);
				indexSearcher.close();
			}		
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			throw new LuceneException();
		} 
		return resultList;
	}
	
	/*
	 * 依ID刪除索引
	 */
	public void delIndex(String id) throws LuceneException {
		IndexReader indexReader;
		try {
			File indexDir = new File(INDEX_STORE_PATH);
			if (indexDir.exists()){
				indexReader = IndexReader.open(INDEX_STORE_PATH);		
				Term term = new Term("id", id);		
				indexReader.deleteDocuments(term);
				indexReader.close();
			}			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			throw new LuceneException();
		}
	}
	</pre>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://lucene-group.group.javaeye.com/group/blog/193307#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 15 May 2008 15:30:55 +0800</pubDate>
        <link>http://lucene-group.group.javaeye.com/group/blog/193307</link>
        <guid>http://lucene-group.group.javaeye.com/group/blog/193307</guid>
      </item>
          <item>
        <title>Lucene實戰開發手記(五）--- 為html/txt格式的文檔創建索引</title>
        <author>cleaneyes</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://cleaneyes.javaeye.com">cleaneyes</a>&nbsp;
                    链接：<a href="http://lucene-group.group.javaeye.com/group/blog/193236" style="color:red;">http://lucene-group.group.javaeye.com/group/blog/193236</a>&nbsp;
          发表时间: 2008年05月15日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>txt與html解析存在亂碼的問題，這個問題困擾了我好幾天，最後找到一些資料，通過多次嘗試，基本解決了。</p>
<p>&nbsp;</p>
<pre name="code" class="java">public class TxtDocHander extends DocHander {

	public Document getDocument(byte[] inputByte) throws IOException {
		// 進行文檔的編碼格式識別	
		CodepageDetectorProxy codepageDetectorProxy = CodepageDetectorProxy.getInstance();
		codepageDetectorProxy.add(UnicodeDetector.getInstance());
		codepageDetectorProxy.add(JChardetFacade.getInstance());
		InputStream inputStream = new ByteArrayInputStream(inputByte);
		
		Charset charset = codepageDetectorProxy.detectCodepage(inputStream,inputByte.length);
		String charsetName = charset.name();		
		if (charsetName.equals("windows-1252")){
			charsetName = "big5";//JChardetFacade對big5的編碼的txt識別不是太好
		}
		String contents = new String(inputByte,charsetName);//編碼轉換了哦
		   
		Document document = new Document();	
		
		addContent(document, contents);		
		
		return document;
	}	</pre>
<p>&nbsp;</p>
<p>html解析，除了編碼問題外，還有文本提取的問題。lucene的demo類庫自帶的HTMLParser 用起來很簡單，能很幹凈的去掉html標簽，但在處理有繁體中文字的文檔時，有時會出現解析中止的情況，不知是何原因。而對HtmlParser所提供的Parser，我不太熟悉，使用時有部分html標簽去不掉，故將兩者結合起來使用，已將問題解決。</p>
<p>&nbsp;</p>
<pre name="code" class="java">public class HtmlDocHander extends DocHander {

	@Override
	public Document getDocument(byte[] inputByte) throws Exception {
		// TODO Auto-generated method stub
		InputStream inputStream = new ByteArrayInputStream(inputByte);
		//編碼轉換
		CodepageDetectorProxy codepageDetectorProxy = CodepageDetectorProxy.getInstance();
		codepageDetectorProxy.add(new HTMLCodepageDetector());			
		
		Charset charset = codepageDetectorProxy.detectCodepage(inputStream,inputByte.length);	
		String contents = new String(inputByte, charset.name());
		
		Document document = new Document();
		addContent(document, parseHtmlToString(contents));//解析出文本內容	
		
		return document;
	}

	public static String  parseHtmlToString(String pageContent) throws Exception {	
		//去掉head部分
		int headStart = pageContent.indexOf("&lt;head&gt;");
		int endStart = pageContent.indexOf("&lt;/head&gt;", headStart);		
		pageContent = pageContent.substring(0, headStart) + pageContent.substring(endStart+7);
		
		//利用HtmlParser包解析
		Parser parser = new Parser(pageContent);
		NodeList nodeList =null;
		
		NodeFilter textFilter = new NodeClassFilter(TextNode.class);  
		nodeList = parser.extractAllNodesThatMatch(textFilter);
		
		StringBuffer bodyBuffer = new StringBuffer("");
		for (int i=0; i&lt;nodeList.size(); i++){
			Node node = nodeList.elementAt(i);			
			bodyBuffer.append(node.toPlainTextString());
			
		}
		String body = bodyBuffer.toString();	
		
		
		//用lucene demo自帶的HtmlParser進一步刪除多余的標簽
		HTMLParser parser2 = new HTMLParser(new StringReader(body));
		LineNumberReader reader = new LineNumberReader(parser2.getReader());
		StringBuffer buffer = new StringBuffer("");		
	    for (String line = reader.readLine(); line != null; line = reader.readLine()){
	    	  buffer.append(line);		        
	    }	     
	    String contents = buffer.toString();
	   
		return contents;
	}</pre>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://lucene-group.group.javaeye.com/group/blog/193236#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 15 May 2008 11:57:40 +0800</pubDate>
        <link>http://lucene-group.group.javaeye.com/group/blog/193236</link>
        <guid>http://lucene-group.group.javaeye.com/group/blog/193236</guid>
      </item>
          <item>
        <title>Lucene實戰開發手記(四）--- 為PDF/excel/doc格式的文檔創建索引</title>
        <author>cleaneyes</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://cleaneyes.javaeye.com">cleaneyes</a>&nbsp;
                    链接：<a href="http://lucene-group.group.javaeye.com/group/blog/193230" style="color:red;">http://lucene-group.group.javaeye.com/group/blog/193230</a>&nbsp;
          发表时间: 2008年05月15日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>上篇有提到這段代碼：</p>
<pre name="code" class="java">DocHander docHander = DocHanderFactory.buildDocHander(fileName);   
           
        attachDocument = docHander.getDocument(attach);   
</pre>
<p>&nbsp;</p>
<p>下面我們看一看實現細節。</p>
<p>&nbsp;</p>
<p>抽象類DocHander的代碼：</p>
<pre name="code" class="java">public abstract class DocHander {
	public static String FIELD_CONTENT = "contents";		
	
	public abstract Document getDocument(byte[] inputByte) throws Exception;	
	
	protected Document addContent(Document document, String content){		
		document.add(new Field(DocHander.FIELD_CONTENT, content ,Field.Store.YES,Field.Index.TOKENIZED));
		return document;
	}	
	
}</pre>
<p>&nbsp;</p>
<p>現看看工廠類DocHanderFactory的代碼：</p>
<pre name="code" class="java">public abstract class DocHanderFactory {
	
	public static DocHander buildDocHander(String fileName){
		DocHander docHander = null;
		if (fileName.toLowerCase().endsWith(".doc")){
			docHander = new WordDocHander();
		}
		else if(fileName.toLowerCase().endsWith(".xls")){
			docHander = new ExcelDocHander();
		}
		else if(fileName.toLowerCase().endsWith(".pdf")){
			docHander = new PdfDocHander();
		}
		else if(fileName.toLowerCase().endsWith(".html") || fileName.toLowerCase().endsWith(".htm")){
			docHander = new HtmlDocHander();
		}
		else{
			docHander = new TxtDocHander();
		}
		return docHander;
	}
}</pre>
<p>&nbsp;</p>
<p>以下貼出WordDocHander、 ExcelDocHander、PdfDocHander的代碼，因為別人已經幫我們包好了，所以我們寫起來很簡單，非常感謝他們！</p>
<pre name="code" class="java">public class WordDocHander extends DocHander {

	public Document getDocument(byte[] inputByte) throws IOException {
		InputStream inputStream = new ByteArrayInputStream(inputByte);
		// TODO Auto-generated method stub		
		Document document = new Document();
		WordExtractor extractor = new WordExtractor(inputStream);		
		addContent(document,extractor.getText());
		return document;
	}
}</pre>
<pre name="code" class="java">public class ExcelDocHander extends DocHander {

	public Document getDocument(byte[] inputByte) throws IOException {
		// TODO Auto-generated method stub
		InputStream inputStream = new ByteArrayInputStream(inputByte);
		Document document = new Document();
		HSSFWorkbook wb = new HSSFWorkbook(inputStream);
		ExcelExtractor extractor = new ExcelExtractor(wb);

		extractor.setFormulasNotResults(true);
		extractor.setIncludeSheetNames(false);
		String content = extractor.getText();

		return addContent(document, content);
	}

}</pre>
<pre name="code" class="java">public class PdfDocHander extends DocHander {

	public Document getDocument(byte[] inputByte) throws IOException {		
//		Document document = LucenePDFDocument.getDocument(inputStream);//如何你不需要摘要顯示所搜索到的內容，就可以直接用這個簡單的方法
		InputStream inputStream = new ByteArrayInputStream(inputByte);
		Document document = new Document();
		PDDocument pdfDocument = PDDocument.load(inputStream );
		try {
	        if( pdfDocument.isEncrypted() )
	        {
	            //Just try using the default password and move on            
				pdfDocument.decrypt( "" );					
	        }//create a writer where to append the text content.
	        StringWriter writer = new StringWriter();
	        PDFTextStripper stripper = new PDFTextStripper();        
	        stripper.writeText( pdfDocument, writer );
	        String contents = writer.getBuffer().toString();
	        super.addContent(document, contents);
		} catch (CryptographyException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();		
			throw new IOException( "Error decrypting document: " + e );
		} catch (InvalidPasswordException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			throw new IOException( "Error decrypting document: " + e );
		}
        
		return document;
	}

}</pre>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://lucene-group.group.javaeye.com/group/blog/193230#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 15 May 2008 11:39:34 +0800</pubDate>
        <link>http://lucene-group.group.javaeye.com/group/blog/193230</link>
        <guid>http://lucene-group.group.javaeye.com/group/blog/193230</guid>
      </item>
          <item>
        <title>Lucene實戰開發手記(三）--- 創建索引細節方法</title>
        <author>cleaneyes</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://cleaneyes.javaeye.com">cleaneyes</a>&nbsp;
                    链接：<a href="http://lucene-group.group.javaeye.com/group/blog/193228" style="color:red;">http://lucene-group.group.javaeye.com/group/blog/193228</a>&nbsp;
          发表时间: 2008年05月15日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="java">	
	/**
	 * 文檔主體建立索引
	 * 注意文檔與附件分成不同的Document，但搜索到附件內容時，需鏈接到其所在文檔
	 * @param article
	 * @return
	 * @throws InterruptedException 
	 * @throws Exception 
	 */
	private Document createArticleIndex(Article article) throws Exception{		
		Document document = new Document();
		//ID
		document.add(new Field("id", article.getId(), Field.Store.YES,
				Field.Index.UN_TOKENIZED));
		//文檔ID
		document.add(new Field("articleId", article.getId(), Field.Store.YES,
				Field.Index.UN_TOKENIZED));
		//文檔標題
		document.add(new Field("topic", article.getTopic(), Field.Store.YES,
				Field.Index.TOKENIZED));
		//文檔分類
		document.add(new Field("categoryId", article.getCategoryId(),
				Field.Store.YES, Field.Index.TOKENIZED));
		
		String content = article.getContent();
		
		//注意文章內容支持html標簽，故此處需提取文本內容
		HTMLParser parser = new HTMLParser(new StringReader(content));	
		LineNumberReader reader = new LineNumberReader(parser.getReader());
		StringBuffer buffer = new StringBuffer("");		
	    for (String line = reader.readLine(); line != null; line = reader.readLine()){
	    	  buffer.append(line);		        
	    }	     
	    String contents = buffer.toString();
		
		document.add(new Field(DocHander.FIELD_CONTENT, contents,
				Field.Store.YES, Field.Index.TOKENIZED));
		return document;
	}
	
	/**
	 * 文檔附件建立索引
	 * @param article
	 * @param articleAttach
	 * @return
	 * @throws Exception
	 */
	private Document createAttachIndex(Article article, ArticleAttach articleAttach) throws Exception{
		Document attachDocument = null;    //注意上傳的附件，已經通過在之前被處理為byte[]形式
		if (articleAttach != null &amp;&amp; articleAttach.getFileBlob().length &gt; 0) {
			byte[] attach = articleAttach.getFileBlob();			
			String fileName = articleAttach.getFileName();
			
			//採用簡單工廠模式，不同的附件格式，採用不同的DocHander，具體實現詳見下篇
			DocHander docHander = DocHanderFactory.buildDocHander(fileName);
			
			attachDocument = docHander.getDocument(attach);
			
			attachDocument.add(new Field("fileName", articleAttach
					.getFileName(), Field.Store.YES, Field.Index.TOKENIZED));
			attachDocument.add(new Field("id", articleAttach.getId(),
					Field.Store.YES, Field.Index.UN_TOKENIZED));
			attachDocument.add(new Field("articleId", article.getId(),
					Field.Store.YES, Field.Index.UN_TOKENIZED));
			attachDocument.add(new Field("topic", article.getTopic(),
					Field.Store.YES, Field.Index.NO));
			attachDocument.add(new Field("categoryId", article.getCategoryId(),
					Field.Store.YES, Field.Index.TOKENIZED));
		}
		return attachDocument;
	}</pre>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://lucene-group.group.javaeye.com/group/blog/193228#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 15 May 2008 11:37:33 +0800</pubDate>
        <link>http://lucene-group.group.javaeye.com/group/blog/193228</link>
        <guid>http://lucene-group.group.javaeye.com/group/blog/193228</guid>
      </item>
          <item>
        <title>Lucene實戰開發手記(二）--- 創建索引主方法</title>
        <author>cleaneyes</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://cleaneyes.javaeye.com">cleaneyes</a>&nbsp;
                    链接：<a href="http://lucene-group.group.javaeye.com/group/blog/193210" style="color:red;">http://lucene-group.group.javaeye.com/group/blog/193210</a>&nbsp;
          发表时间: 2008年05月15日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>對索引操作的類為<span style="color: #0000ff;">KbIndexProcesser</span>&nbsp;</p>
<p>文檔主體類：Article</p>
<pre name="code" class="java">public class Article {
	private String id;
	private String topic;
	private String content;
	private String categoryId;
	private String category;
   .......
}</pre>
<p>&nbsp;附件實體類：ArticleAttach </p>
<pre name="code" class="java">public class ArticleAttach {
	private String id;
	private String articleId;
	private String fileName;
	private byte[] fileBlob;
......
}</pre>
<p>&nbsp;</p>
<p><span style="color: #0000ff;">KbIndexProcesser</span>&nbsp;創建索引的代碼：</p>
<pre name="code" class="java">public class KbIndexProcesser {

	private static final String INDEX_STORE_PATH = "luceneIndex";//索引存放路徑
	private static final int CONTENTS_SHOW_LENGTH = 200;//文字摘要的長度
	private static final int MAX_RESULT = 20;//最大的搜索結果數，沒做分頁
		
	/**
	 * 創建索引
	 * @param article
	 * @param articleAttach
	 * @param attachOnly 隻為附附建索引嗎
	 * @throws LuceneException
	 */
	public  void createIndex(Article article, ArticleAttach articleAttach, boolean attachOnly)
			throws LuceneException {
		IndexWriter indexWriter = null;
		File indexDir = new File(INDEX_STORE_PATH);
		//debug
		
		Analyzer analyzer = new CJKAnalyzer();

		long startTime = new Date().getTime();
		
		try{
			if (indexDir.exists()) {
				indexWriter = new IndexWriter(indexDir, analyzer, false);
			} else {
				indexWriter = new IndexWriter(indexDir, analyzer, true);
			}
			
			if (attachOnly == false){
				//文章主體建索引
				Document document = this.createArticleIndex(article);
				indexWriter.addDocument(document);
			}			
			
			// 附件建索引
			if (articleAttach != null){
				Document attachDocument = this.createAttachIndex(article, articleAttach);
				indexWriter.addDocument(attachDocument);
			}

			indexWriter.optimize();
			indexWriter.close();
		} catch(Exception ex){
			ex.printStackTrace();
			throw new LuceneException();
		}
		
		long endTime = new Date().getTime();
		System.out.println("It takes " + (endTime - startTime)
				+ " milliseconds to create index for the files in directory "
				+ indexDir.getPath());
	}
}</pre>
<p>&nbsp;所用分詞器為CJKAnalyzer，曾使用CWordAnalyzer&nbsp;分詞，但它在高亮顯示處理時會報錯，不知是何故，故棄之。</p>
          <br/>
          <span style="color:red;">
            <a href="http://lucene-group.group.javaeye.com/group/blog/193210#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 15 May 2008 11:07:38 +0800</pubDate>
        <link>http://lucene-group.group.javaeye.com/group/blog/193210</link>
        <guid>http://lucene-group.group.javaeye.com/group/blog/193210</guid>
      </item>
          <item>
        <title>Lucene實戰開發手記(一）--- 前言</title>
        <author>cleaneyes</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://cleaneyes.javaeye.com">cleaneyes</a>&nbsp;
                    链接：<a href="http://lucene-group.group.javaeye.com/group/blog/193205" style="color:red;">http://lucene-group.group.javaeye.com/group/blog/193205</a>&nbsp;
          发表时间: 2008年05月15日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #993366;">《Lucene實戰開發手記》系列文章的適用對象為Lucene初學者。</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 本人所在項目組正在開發一個Call Center的系統。需要開發一個知識庫來為客服提供知識搜索的支持。採用Lucene做為搜索引擎。</p>
<p>&nbsp;</p>
<p>知識庫的需求如下：</p>
<p>1、知識庫以文檔的形式組織，每篇文檔含標題、分類（樹狀）、內容，可上傳多個附件。</p>
<p>2、文檔內容支持html格式，標題、內容、附件均要建立索引，能被搜索到。附件格式支持doc,xls,pdf,txt,htm,html</p>
<p>3、按關鍵詞搜索標題、內容、附件，隻要其一包含關鍵詞則該文檔被列出，支持按分類限制搜索范圍</p>
<p>4、高亮顯示搜索到內容的關鍵文字，暫不要求分頁，隻顯示前20條。</p>
<p>&nbsp;</p>
<p><span style="color: #993366;">一個月的時間，從對lucene不了解，到實現以上功能，收獲不少，除lucene外，引用了很多第三方的類庫，對很多細節問題，由於開發時間的限制，我也隻能不求甚解。</span></p>
<p>&nbsp;</p>
<p><span style="color: #993366;">Javaeye上有很多高手和好文章，讓我在學習過程中得到了很大的幫助。但我覺得比較系統的，以實例代碼講解的例子還太少，有時我們學習一項新技術時，如果有完整的實例，可以為我們節約很多時間，但我們經常需要查找許許多多的貼子才能解決我們遇到的問題，而這些問題是很多初學者都會遇到的。</span></p>
<p>&nbsp;</p>
<p><span style="color: #993366;">所以我將在下一篇貼出項目中的實際代碼與大家共享，分享我遇到的實際問題，希望對初學者有一些參考作用。我所學甚淺，望各位批評指正，留言！</span></p>
<p>&nbsp;</p>
<p>所用lucene版本為2.0</p>
<p><span style="color: #993366;">與lucene相關用到的第三方類庫：</span></p>
<p><span style="color: #0000ff;">&nbsp;lucene-core-2.0.0.jar</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;lucene2.0核心</p>
<p><span style="color: #0000ff;">lucene-demos-2.0.0.jar</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; 主要用HTMLParser來解析html文檔</p>
<p><span style="color: #0000ff;">lucene-highlighter-2.0.0.jar</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;高亮顯示</p>
<p><span style="color: #0000ff;">segment.jar</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CJKAnalyzer</p>
<p><span style="color: #0000ff;">poi-3.0.2-FINAL-20080204.jar</span></p>
<p><span style="color: #0000ff;">poi-contrib-3.0.2-FINAL-20080204.jar</span></p>
<p><span style="color: #0000ff;">poi-scratchpad-3.0.2-FINAL-20080204.jar</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 支持word與Excel文檔的解析</p>
<p><span style="color: #0000ff;">FontBox-0.1.0.jar/PDFBox-0.7.3.jar</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;支持PDF文檔解析</p>
<p><span style="color: #0000ff;">htmlparser.jar&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">有名的HtmlParser</span></p>
<p><span style="color: #0000ff;">cpdetector_1.0.5.jar</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 文檔編碼自動識別<span style="color: #000000;">&nbsp;</span>&nbsp;</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://lucene-group.group.javaeye.com/group/blog/193205#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 15 May 2008 10:58:34 +0800</pubDate>
        <link>http://lucene-group.group.javaeye.com/group/blog/193205</link>
        <guid>http://lucene-group.group.javaeye.com/group/blog/193205</guid>
      </item>
          <item>
        <title>实现Microsoft Project 文件格式的解析和内容抽取</title>
        <author>betafox</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://betafox.javaeye.com">betafox</a>&nbsp;
                    链接：<a href="http://lucene-group.group.javaeye.com/group/blog/192476" style="color:red;">http://lucene-group.group.javaeye.com/group/blog/192476</a>&nbsp;
          发表时间: 2008年05月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;</p>
<ul>
<li><strong>文本内容提取：</strong>&nbsp; 使用net.sf.mpxj 的工具提取文本内容；</li>
</ul>
<pre name="code" class="java">package com.koders.se.parser;

import com.koders.se.search.WikiDOC;
import net.sf.mpxj.ProjectFile;
import net.sf.mpxj.Resource;
import net.sf.mpxj.ResourceAssignment;
import net.sf.mpxj.Task;
import net.sf.mpxj.mpp.MPPReader;
import net.sf.mpxj.mpx.MPXReader;
import net.sf.mpxj.mspdi.MSPDIReader;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

/**
 * Microsoft project 解析器
 */
public class MppDocHandler implements DocumentHandler {

    public Document getDocument(InputStream is)
            throws DocumentHandlerException {

        ProjectFile mpx = readProject(is);

        String bodyText = dumpText(mpx);

        if (bodyText != null) {
            Document doc = new Document();

            doc.add(new Field(WikiDOC.DOC_TITLE, dumpTitle(mpx), Field.Store.YES, Field.Index.TOKENIZED, Field.TermVector.WITH_POSITIONS_OFFSETS));

            doc.add(new Field(WikiDOC.DOC_CONTENT, bodyText, Field.Store.COMPRESS, Field.Index.TOKENIZED, Field.TermVector.WITH_POSITIONS_OFFSETS));

            
            return doc;
        }
        return null;
    }

    public static ProjectFile readProject(InputStream is) throws DocumentHandlerException {
        is = new BufferedInputStream(is);
        is.mark(0);//下面需要重复使用输入流，所以重新包装并设置重置标记

        ProjectFile mpx = null;

        try {
            mpx = new MPXReader().read(is);
        }
        catch (Exception ex) {
            try {
                is.reset();//重置
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        if (mpx == null) {
            try {
                mpx = new MPPReader().read(is);
            }
            catch (Exception ex) {
                try {
                    is.reset();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

        if (mpx == null) {
            try {
                mpx = new MSPDIReader().read(is);
            }
            catch (Exception ex) {
            }
        }

        if (mpx == null) {
            throw new DocumentHandlerException("Failed to read file");
        }
        return mpx;
    }

    private final static SimpleDateFormat f = new SimpleDateFormat("yyyy年M月d日");

    private final static String IndentString = "   ";

    private List idList = new ArrayList();
    private List nameList = new ArrayList();
    private List resList = new ArrayList();
    private List startList = new ArrayList();
    private List endList = new ArrayList();

    public String dumpTitle(ProjectFile file) {
        String title = "";
        List childTasks = file.getChildTasks();
        for (int i = 0; i &lt; childTasks.size(); i++) {
            Task task = (Task) childTasks.get(i);
            title += task.getName() + " ";
        }
        return title;
    }

    public String dumpText(ProjectFile file) {
        idList.add("【编号】");
        nameList.add("【任务名】");
        resList.add("【资源】");
        startList.add("【开始时间】");
        endList.add("【结束时间】");

        List childTasks = file.getChildTasks();
        for (int i = 0; i &lt; childTasks.size(); i++) {
            Task task = (Task) childTasks.get(i);
            idList.add("  " + task.getID().toString());
            nameList.add(task.getName());
            resList.add(listTaskRes(task));
            startList.add(f.format(task.getStart()));
            endList.add(f.format(task.getFinish()));
            listHierarchy(task, IndentString);
        }

        idList = fixLength(idList);
        nameList = fixLength(nameList);
        resList = fixLength(resList);
        startList = fixLength(startList);
        endList = fixLength(endList);

        StringBuffer buf = new StringBuffer();
        for (int i = 0, size = nameList.size(); i &lt; size; i++) {
            buf.append(idList.get(i))
                    .append(nameList.get(i))
                    .append(IndentString)
                    .append(resList.get(i))
                    .append(IndentString)
                    .append(startList.get(i))
                    .append(IndentString)
                    .append(endList.get(i))
                    .append("\n");
        }

        idList.clear();
        nameList.clear();
        startList.clear();
        endList.clear();
        resList.clear();

        return buf.toString();

    }

    private List fixLength(List data) {
        int max = 0;
        for (int ii = 0; ii &lt; data.size(); ii++) {
            String str = (String) data.get(ii);
            int tmp = str.getBytes().length;
            max = (max &lt; tmp ? tmp : max);
        }
        List ret = new ArrayList();
        for (int ii = 0; ii &lt; data.size(); ii++) {
            String str = (String) data.get(ii);
            int tmp = max - str.getBytes().length;
            for (int i = 0; i &lt; tmp; i++) {
                str = str.concat(" ");
            }
            ret.add(str);
        }
        return ret;
    }

    private void listHierarchy(Task task, String indent) {
        List childTasks = task.getChildTasks();
        for (int i = 0; i &lt; childTasks.size(); i++) {
            Task child = (Task) childTasks.get(i);
            idList.add("  " + child.getID().toString());
            nameList.add(indent + child.getName());
            resList.add(listTaskRes(child));
            startList.add(f.format(child.getStart()));
            endList.add(f.format(child.getFinish()));
            listHierarchy(child, indent + IndentString);
        }
    }

    private String listTaskRes(Task task) {
        StringBuffer buf = new StringBuffer();
        List assignments = task.getResourceAssignments();
        for (int i = 0; i &lt; assignments.size(); i++) {
            ResourceAssignment assignment = (ResourceAssignment) assignments.get(i);
            Resource resource = assignment.getResource();

            if (resource != null) {
                buf.append(resource.getName()).append(" ");
            }
        }
        return buf.toString();
    }

    public static void main(String[] args) throws Exception {
        MppDocHandler mppDocHandler = new MppDocHandler();
        ProjectFile projectFile = MppDocHandler.readProject(new FileInputStream("项目实施计划.mpp"));
        String s = mppDocHandler.dumpText(projectFile);
        System.out.println(s);
    }

}</pre>
<ul>
<li>&nbsp;输出格式：</li>
</ul>
<p>&nbsp;
<table border="1">
<tbody>
<tr>
<td><br />【编号】【任务名】&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 【资源】&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 【开始时间】&nbsp;&nbsp;&nbsp; 【结束时间】 <br />&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp; **扩建项目实施计划_0903&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008年4月1日&nbsp;&nbsp;&nbsp; 2008年7月1日 <br />&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 项目启动&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008年4月1日&nbsp;&nbsp;&nbsp; 2008年4月8日 <br />&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 组建项目组、制订项目计划&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008年4月1日&nbsp;&nbsp;&nbsp; 2008年4月8日 <br />&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 项目启动会&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008年4月1日&nbsp;&nbsp;&nbsp; 2008年4月1日 <br />&nbsp; 60&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 综合业务管理子系统需求分析&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 张四季 黄纬 笋素爱 李海涛 李贤宇&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008年4月1日&nbsp;&nbsp;&nbsp; 2008年5月4日 <br />&nbsp; 61&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 业务管理&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 张四季 黄纬 笋素爱 李海涛&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008年4月1日&nbsp;&nbsp;&nbsp; 2008年4月15日<br />&nbsp; 62&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 提交调研提纲文档&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 张四季 黄纬 笋素爱&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008年4月1日&nbsp;&nbsp;&nbsp; 2008年4月1日 <br />&nbsp; 63&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 需求内容调研&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 张四季 黄纬 笋素爱&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008年4月2日&nbsp;&nbsp;&nbsp; 2008年4月3日 <br />&nbsp; 64&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 业务种类设置&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 张四季 黄纬 笋素爱&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008年4月2日&nbsp;&nbsp;&nbsp; 2008年4月3日 <br />&nbsp; 65&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 增值业务支撑&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 张四季 黄纬 笋素爱&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008年4月2日&nbsp;&nbsp;&nbsp; 2008年4月3日 <br />&nbsp; 66&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 监控策略设置&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 张四季 黄纬 笋素爱&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008年4月2日&nbsp;&nbsp;&nbsp; 2008年4月3日 <br />&nbsp; 67&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 封堵策略设置&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 张四季 黄纬 笋素爱&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008年4月2日&nbsp;&nbsp;&nbsp; 2008年4月3日 <br />&nbsp; 68&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 广告策略设置&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 张四季 黄纬 笋素爱&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008年4月2日&nbsp;&nbsp;&nbsp; 2008年4月3日 <br />&nbsp; 69&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 需求分析&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 张四季 黄纬 笋素爱&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008年4月7日&nbsp;&nbsp;&nbsp; 2008年4月7日 <br />&nbsp; 70&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 整理调研文档&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008年4月7日&nbsp;&nbsp;&nbsp; 2008年4月7日 <br />&nbsp; 71&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 编写需求说明书-业务管理部分&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008年4月7日&nbsp;&nbsp;&nbsp; 2008年4月7日 <br />&nbsp; 72&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 页面原型设计&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 张四季 黄纬 笋素爱&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008年4月8日&nbsp;&nbsp;&nbsp; 2008年4月14日<br />&nbsp; 73&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 业务管理需求与页面原型确认&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 张四季 黄纬 笋素爱&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008年4月15日&nbsp;&nbsp; 2008年4月15日<br />&nbsp; 74&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 资料管理&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 笋素爱&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008年4月16日&nbsp;&nbsp; 2008年4月23日<br />&nbsp; 75&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 提交调研提纲文档&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008年4月16日&nbsp;&nbsp; 2008年4月16日<br />&nbsp; 76&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 需求内容调研&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008年4月17日&nbsp;&nbsp; 2008年4月17日<br />&nbsp; 77&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 客户资料管理&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008年4月17日&nbsp;&nbsp; 2008年4月17日<br />&nbsp; 78&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 黑名单管理&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008年4月17日&nbsp;&nbsp; 2008年4月17日<br />&nbsp; 79&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 白名单管理&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008年4月17日&nbsp;&nbsp; 2008年4月17日<br />&nbsp; 80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ADSL帐号管理&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008年4月17日&nbsp;&nbsp; 2008年4月17日<br />&nbsp; 81&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IP地址管理&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008年4月17日&nbsp;&nbsp; 2008年4月17日<br />&nbsp; 82&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 需求分析&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008年4月18日&nbsp;&nbsp; 2008年4月18日<br />&nbsp; 83&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 整理调研文档&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008年4月18日&nbsp;&nbsp; 2008年4月18日<br />&nbsp; 84&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 编写需求说明书-资料管理部分&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008年4月18日&nbsp;&nbsp; 2008年4月18日<br />&nbsp; 85&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 页面原型设计&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008年4月21日&nbsp;&nbsp; 2008年4月22日<br />&nbsp; 86&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 资料管理需求与页面原型确认&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008年4月23日&nbsp;&nbsp; 2008年4月23日<br />&nbsp; 87&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数据管理&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 张四季 黄纬&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008年4月16日&nbsp;&nbsp; 2008年4月23日<br />&nbsp; 88&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 提交调研提纲文档&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008年4月16日&nbsp;&nbsp; 2008年4月16日<br />&nbsp; 89&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 需求内容调研&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008年4月17日&nbsp;&nbsp; 2008年4月17日<br />&nbsp; 90&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数据采集&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008年4月17日&nbsp;&nbsp; 2008年4月17日<br />&nbsp; 91&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数据转换&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008年4月17日&nbsp;&nbsp; 2008年4月17日<br />&nbsp; 92&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数据导出&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008年4月17日&nbsp;&nbsp; 2008年4月17日<br />&nbsp; 93&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 需求分析&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008年4月18日&nbsp;&nbsp; 2008年4月18日<br />&nbsp; 94&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 整理调研文档&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008年4月18日&nbsp;&nbsp; 2008年4月18日<br />&nbsp; 95&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 编写需求说明书数据管理部分&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008年4月18日&nbsp;&nbsp; 2008年4月18日<br />&nbsp; 96&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 页面原型设计&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008年4月21日&nbsp;&nbsp; 2008年4月22日<br />&nbsp; 97&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数据管理需求与页面原型确认&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008年4月23日&nbsp;&nbsp; 2008年4月23日<br />&nbsp; 98&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 综合查询&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 笋素爱&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008年4月24日&nbsp;&nbsp; 2008年5月4日 <br />&nbsp; 99&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 提交调研提纲文档&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008年4月24日&nbsp;&nbsp; 2008年4月24日<br />&nbsp; 100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 需求内容调研&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008年4月25日&nbsp;&nbsp; 2008年4月25日<br />&nbsp; 101&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 客户基本信息查询&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008年4月25日&nbsp;&nbsp; 2008年4月25日<br />&nbsp; 102&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ADSL帐号查询&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008年4月25日&nbsp;&nbsp; 2008年4月25日<br />&nbsp; 103&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 专线IP查询&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008年4月25日&nbsp;&nbsp; 2008年4月25日<br />&nbsp; 104&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 业务策略查询&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008年4月25日&nbsp;&nbsp; 2008年4月25日<br />&nbsp; 105&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 流量数据查询&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008年4月25日&nbsp;&nbsp; 2008年4月25日<br />&nbsp; 106&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 需求分析&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008年4月28日&nbsp;&nbsp; 2008年4月28日<br />&nbsp; 107&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 整理调研文档&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008年4月28日&nbsp;&nbsp; 2008年4月28日<br />&nbsp; 108&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 编写需求说明书-综合查询部分&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008年4月28日&nbsp;&nbsp; 2008年4月28日<br />&nbsp; 109&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 页面原型设计&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008年4月29日&nbsp;&nbsp; 2008年4月30日<br />&nbsp; 110&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 综合查询需求与页面原型确认&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008年5月4日&nbsp;&nbsp;&nbsp; 2008年5月4日 <br />&nbsp; 208&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 提交第一版需求说明书&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 全体需求人员&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008年5月5日&nbsp;&nbsp;&nbsp; 2008年5月5日 <br /></td>
</tr>
</tbody>
</table>
</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://lucene-group.group.javaeye.com/group/blog/192476#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 13 May 2008 09:55:23 +0800</pubDate>
        <link>http://lucene-group.group.javaeye.com/group/blog/192476</link>
        <guid>http://lucene-group.group.javaeye.com/group/blog/192476</guid>
      </item>
          <item>
        <title>小项目怎么做需求分析?</title>
        <author>mfcai</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://staratsky.javaeye.com">mfcai</a>&nbsp;
                    链接：<a href="http://lucene-group.group.javaeye.com/group/blog/192073" style="color:red;">http://lucene-group.group.javaeye.com/group/blog/192073</a>&nbsp;
          发表时间: 2008年05月12日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          在做项目时，经常会碰到这样的事情.<br />客户向我们反映在和你们的工程师谈论需求时，他们总是满口答应没问题。可是，当他们做好以后，拿过来一看，根本就不是这么回事。而开发人员也在诉苦：用户什么都不懂，而且他们的需求老是变动，时间又这么紧,你让我们怎么办？<br />我觉得如果开发人员在做需求分析时,如果注意以下几点,也许可以避免被动的局面.<br /><br /><strong>1、掌握相关的行业知识</strong><br />  在和客户沟通之前，最好了解一下相关的行业知识。<br />  有一个项目管理人员说：行业知识可有可无，作为需求人员，最重要的是和客户沟通。最好把客户讲的东西都记下来。然后，由项目组决定后，再把意见反馈给用户。这种沟通方式，既不能有效的发现问题，也容易延误项目时间。<br />   案例：<br />   小A某名牌大学毕业，公司为了锻炼他，特意安排他和一个比较重要的客户进行一次沟通。小A和客户电话联系，商定了见面的时间和地点。西装革履的小A提前十分钟来到了见面的地点。一番客套之后，小A和客户就开始进入话题。客户开始谈他的需求，从项目背景到项目目的，从业务流程到相关部门和人员。客户兴致勃勃地说着，小A手忙脚乱的记着。客户停下来，问小A你觉得我的观点有什么需要补充吗？小A老实地回答说，我对业务还不是很熟悉。客户一下兴致全无，对小A说，等你对业务熟悉了，再来找我把。<br /><br /><strong>2、重在沟通</strong><br />  沟通的方式可以是访谈和调研、会议、电话、电子邮件、小组讨论、模拟演示等不同形式。我的意见是最好是与客户面对面的沟通。金庸武侠小说中的高手过招，都是面带微笑，不露声色，比拼的是内力。面对面的沟通，就是比拼内力。所以，一定要把准备工作都做好了。<br />  沟通其实也是在相互妥协。对用户合理的要求，要尽量满足。用户的一些不合理的要求，要想办法避免。要委婉地提醒用户，如果这样做，可能要增加项目时间，或者对运行环境有更高的要求。<br />  沟通一定要有记录，对于交流的结果还可以进行分类，便于后续的分析活动。<br /><br /><strong>3、深究细节</strong><br />  不要等到项目做好后，才让客户发现问题。<br />  客户所能提供给你的只是他们想到的功能需求，很多问题并不在他们考虑的范围之内，如果作为项目承担方没有去做分析，简单的按照功能要求去设计、规划，最终出来的系统是很难完全符合客户的业务流程的.这时，在客户看来当然需要更改.但这种更改却被我们看成了需求的更改。既然是需求的更改,那么就需要增加项目成本(资源)或延长项目时间。我看过一篇文章,说要要想项目成功,就得和用户建立亲密的伙伴关系.可是,这种以需求的更改为理由让用户从口袋里掏钱,亲兄弟也不干阿.<br />  所以,需求分析不仅仅是拿到客户的需求，更重要的是还需进行分析，了解细节，并就细节跟客户咨询，获取最详细的资料。
          <br/>
          <span style="color:red;">
            <a href="http://lucene-group.group.javaeye.com/group/blog/192073#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 12 May 2008 01:43:07 +0800</pubDate>
        <link>http://lucene-group.group.javaeye.com/group/blog/192073</link>
        <guid>http://lucene-group.group.javaeye.com/group/blog/192073</guid>
      </item>
          <item>
        <title>求教一个compass 中存储索引的问题</title>
        <author>星星@</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://mao1602.javaeye.com">星星@</a>&nbsp;
                    链接：<a href="http://lucene-group.group.javaeye.com/group/blog/191330" style="color:red;">http://lucene-group.group.javaeye.com/group/blog/191330</a>&nbsp;
          发表时间: 2008年05月09日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          我是一个compass的初学者，做了一个compass的存储索引的例子，但是运行时却总是报下面的错,不知是什么原因：<br />2008-05-09 10:14:05,140 ERROR [org.compass.core.lucene.engine.transaction.ReadCommittedTransaction] - &lt;Failed to read index reader properties><br />java.lang.NoSuchFieldException: directoryOwner<br />	at java.lang.Class.getDeclaredField(Unknown Source)<br />	at org.compass.core.util.FieldInvoker.prepare(FieldInvoker.java:46)<br />	at org.compass.core.lucene.engine.transaction.ReadCommittedTransaction.&lt;clinit>(ReadCommittedTransaction.java:226)<br />	at org.compass.core.lucene.engine.LuceneSearchEngine.begin(LuceneSearchEngine.java:205)<br />	at org.compass.spring.transaction.SpringSyncTransaction.begin(SpringSyncTransaction.java:68)<br />	at org.compass.spring.transaction.SpringSyncTransactionFactory.doBeginTransaction(SpringSyncTransactionFactory.java:72)<br />	at org.compass.core.transaction.AbstractTransactionFactory.beginTransaction(AbstractTransactionFactory.java:74)<br />	at org.compass.core.impl.DefaultCompassSession.beginTransaction(DefaultCompassSession.java:155)<br />	at org.compass.core.CompassTemplate.execute(CompassTemplate.java:133)<br />	at org.compass.core.CompassTemplate.execute(CompassTemplate.java:117)<br />	at org.compass.core.impl.DefaultCompass$TransactionalSearchEngineIndexManager.verifyIndex(DefaultCompass.java:291)<br />	at org.compass.core.lucene.engine.manager.ScheduledLuceneSearchEngineIndexManager.verifyIndex(ScheduledLuceneSearchEngineIndexManager.java:98)<br />	at org.compass.core.impl.DefaultCompass.&lt;init>(DefaultCompass.java:147)<br />	at org.compass.core.impl.DefaultCompass.&lt;init>(DefaultCompass.java:102)<br />	at org.compass.core.impl.DefaultCompass.&lt;init>(DefaultCompass.java:95)<br />	at org.compass.core.config.CompassConfiguration.buildCompass(CompassConfiguration.java:191)<br />	at org.compass.spring.LocalCompassBean.newCompass(LocalCompassBean.java:332)<br />	at org.compass.spring.LocalCompassBean.afterPropertiesSet(LocalCompassBean.java:322)<br />	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1062)<br />	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1029)<br />	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:420)<br />	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:245)<br />	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:141)<br />	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:242)<br />	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:156)<br />	at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:246)<br />	at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:128)<br />	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:955)<br />	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:729)<br />	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:416)<br />	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:245)<br />	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:141)<br />	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:242)<br />	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:156)<br />	at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:246)<br />	at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:128)<br />	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:955)<br />	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:729)<br />	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:416)<br />	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:245)<br />	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:141)<br />	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:242)<br />	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:156)<br />	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:290)<br />	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:348)<br />	at org.springframework.context.support.ClassPathXmlApplicationContext.&lt;init>(ClassPathXmlApplicationContext.java:92)<br />	at org.springframework.context.support.ClassPathXmlApplicationContext.&lt;init>(ClassPathXmlApplicationContext.java:77)<br />	at org.springframework.context.support.ClassPathXmlApplicationContext.&lt;init>(ClassPathXmlApplicationContext.java:68)<br />	at test.CompassTest.&lt;clinit>(CompassTest.java:30)<br />	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)<br />	at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)<br />	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)<br />	at java.lang.reflect.Constructor.newInstance(Unknown Source)<br />	at junit.framework.TestSuite.createTest(TestSuite.java:131)<br />	at junit.framework.TestSuite.addTestMethod(TestSuite.java:114)<br />	at junit.framework.TestSuite.&lt;init>(TestSuite.java:75)<br />以下是配置文件：<br />&lt;bean id="sessionFactory"<br />		class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><br />		&lt;property name="dataSource"><br />			&lt;ref local="dataSource" /><br />		&lt;/property><br />		&lt;property name="hibernateProperties"><br />			&lt;props><br />				&lt;prop key="dialect"><br />					org.hibernate.dialect.MySQLDialect<br />				&lt;/prop><br />				&lt;prop key="show_sql">true&lt;/prop><br />			&lt;/props><br />		&lt;/property><br />		&lt;property name="mappingDirectoryLocations"><br />            &lt;list><br />                &lt;value>model&lt;/value><br />            &lt;/list><br />        &lt;/property><br />	&lt;/bean><br /><br />	<br /><br />	&lt;bean id="hibernateTemplate"<br />		class="org.springframework.orm.hibernate3.HibernateTemplate"><br />		&lt;property name="sessionFactory"><br />			&lt;ref local="sessionFactory" /><br />		&lt;/property><br />	&lt;/bean><br /><br />	&lt;bean id="articleDAO" class="dao.ArticleDAO"><br />		&lt;property name="hibernateTemplate"><br />			&lt;ref local="hibernateTemplate" /><br />		&lt;/property><br />	&lt;/bean><br /><br />	&lt;bean id="authorDAO" class="dao.AuthorDAO"><br />		&lt;property name="hibernateTemplate"><br />			&lt;ref local="hibernateTemplate" /><br />		&lt;/property><br />	&lt;/bean><br /><br />	&lt;bean id="transactionManager"<br />		class="org.springframework.orm.hibernate3.HibernateTransactionManager"><br />		&lt;property name="sessionFactory"><br />			&lt;ref local="sessionFactory" /><br />		&lt;/property><br />	&lt;/bean><br /><br />	&lt;bean id="compassConfiguration"<br />		class="org.compass.core.config.CompassConfiguration" /><br />		<br />	&lt;bean id="annotationConfiguration"<br />        class="org.compass.annotations.config.CompassAnnotationsConfiguration"><br />    &lt;/bean><br /><br />	&lt;bean id="compass" class="org.compass.spring.LocalCompassBean"><br />		&lt;!-- 这里配置只用作建立索引的类 --><br />		&lt;property name="classMappings"><br />            &lt;list><br />                &lt;value>com.mobilesoft.esales.model.Article&lt;/value><br />            &lt;/list><br />        &lt;/property><br />		&lt;property name="compassConfiguration"<br />			ref="annotationConfiguration" /><br />		&lt;property name="compassSettings"><br />			&lt;props><br />				&lt;prop key="compass.engine.connection">file:///D:/compass&lt;/prop><br />				&lt;prop key="compass.transaction.factory"><br />					org.compass.spring.transaction.SpringSyncTransactionFactory<br />				&lt;/prop><br />			&lt;/props><br />		&lt;/property><br />		&lt;property name="transactionManager" ref="transactionManager" /><br />	&lt;/bean><br /><br />	&lt;bean id="compassTemplate"<br />		class="org.compass.core.CompassTemplate"><br />		&lt;property name="compass"><br />			&lt;ref local="compass" /><br />		&lt;/property><br />	&lt;/bean><br /><br />	&lt;bean id="hibernateGpsDevice"<br />		class="org.compass.spring.device.hibernate.SpringHibernate3GpsDevice"><br />		&lt;property name="name"><br />			&lt;value>hibernateDevice&lt;/value><br />		&lt;/property><br />		&lt;property name="sessionFactory" ref="sessionFactory" /><br />	&lt;/bean><br /><br />	&lt;bean id="compassGps" class="org.compass.gps.impl.SingleCompassGps"<br />		init-method="start" destroy-method="stop"><br />		&lt;property name="compass" ref="compass" /><br />		&lt;property name="gpsDevices"><br />			&lt;list><br />				&lt;ref local="hibernateGpsDevice" /><br />			&lt;/list><br />		&lt;/property><br />	&lt;/bean><br />	<br />	&lt;!-- 自动随Spring ApplicationContext启动而重建索引  sprindside 中的--> <br />	&lt;bean id="compassIndexBuilder" class="compass.CompassIndexBuilder"<br />		lazy-init="false"><br />		&lt;property name="compassGps" ref="compassGps" /><br />		&lt;property name="buildIndex" value="true" /><br />		&lt;property name="lazyTime" value="10" /><br />	&lt;/bean>
          <br/>
          <span style="color:red;">
            <a href="http://lucene-group.group.javaeye.com/group/blog/191330#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 09 May 2008 10:26:37 +0800</pubDate>
        <link>http://lucene-group.group.javaeye.com/group/blog/191330</link>
        <guid>http://lucene-group.group.javaeye.com/group/blog/191330</guid>
      </item>
          <item>
        <title>Lucene2.3.2发布了</title>
        <author>grantbb</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://grantbb.javaeye.com">grantbb</a>&nbsp;
                    链接：<a href="http://lucene-group.group.javaeye.com/group/blog/190998" style="color:red;">http://lucene-group.group.javaeye.com/group/blog/190998</a>&nbsp;
          发表时间: 2008年05月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          最新的Lucene2.3.2发布了，主要修改了一些创建和修改索引时候的Bug。<br /><br />======================= Release 2.3.2 2008-05-05 =======================<br /><br />Bug fixes<br /><br /> 1. LUCENE-1191: On hitting OutOfMemoryError in any index-modifying<br />    methods in IndexWriter, do not commit any further changes to the<br />    index to prevent risk of possible corruption.  (Mike McCandless)<br /><br /> 2. LUCENE-1197: Fixed issue whereby IndexWriter would flush by RAM<br />    too early when TermVectors were in use.  (Mike McCandless)<br /><br /> 3. LUCENE-1198: Don't corrupt index if an exception happens inside<br />    DocumentsWriter.init (Mike McCandless)<br /><br /> 4. LUCENE-1199: Added defensive check for null indexReader before<br />    calling close in IndexModifier.close() (Mike McCandless)<br /><br /> 5. LUCENE-1200: Fix rare deadlock case in addIndexes* when<br />    ConcurrentMergeScheduler is in use (Mike McCandless)<br /><br /> 6. LUCENE-1208: Fix deadlock case on hitting an exception while<br />    processing a document that had triggered a flush (Mike McCandless)<br /><br /> 7. LUCENE-1210: Fix deadlock case on hitting an exception while<br />    starting a merge when using ConcurrentMergeScheduler (Mike McCandless)<br /><br /> 8. LUCENE-1222: Fix IndexWriter.doAfterFlush to always be called on<br />    flush (Mark Ferguson via Mike McCandless)<br />	<br /> 9. LUCENE-1226: Fixed IndexWriter.addIndexes(IndexReader[]) to commit<br />    successfully created compound files. (Michael Busch)<br /><br />10. LUCENE-1150: Re-expose StandardTokenizer's constants publicly;<br />    this was accidentally lost with LUCENE-966.  (Nicolas LalevÃ©e via<br />    Mike McCandless)<br /><br />11. LUCENE-1262: Fixed bug in BufferedIndexReader.refill whereby on<br />    hitting an exception in readInternal, the buffer is incorrectly<br />    filled with stale bytes such that subsequent calls to readByte()<br />    return incorrect results.  (Trejkaz via Mike McCandless)<br /><br />12. LUCENE-1270: Fixed intermittant case where IndexWriter.close()<br />    would hang after IndexWriter.addIndexesNoOptimize had been<br />    called.  (Stu Hood via Mike McCandless)<br />	<br />Build<br /><br /> 1. LUCENE-1230: Include *pom.xml* in source release files. (Michael Busch)
          <br/>
          <span style="color:red;">
            <a href="http://lucene-group.group.javaeye.com/group/blog/190998#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 08 May 2008 11:54:28 +0800</pubDate>
        <link>http://lucene-group.group.javaeye.com/group/blog/190998</link>
        <guid>http://lucene-group.group.javaeye.com/group/blog/190998</guid>
      </item>
          <item>
        <title>八皇后问题</title>
        <author>zwm512327</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zwm512327.javaeye.com">zwm512327</a>&nbsp;
                    链接：<a href="http://lucene-group.group.javaeye.com/group/blog/190709" style="color:red;">http://lucene-group.group.javaeye.com/group/blog/190709</a>&nbsp;
          发表时间: 2008年05月07日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>上午闲着突然想起八皇后问题，上学时听过但没做过。反正没事，我就试着做下。一个上午在纸上画来画去，还是没有思路，都快崩溃了。到下午时候突然有点想法。试着打了一个满足条件的。看来不错，一鼓作气终于做出来了。做出来后发现其实是因为我对递归及回溯了解的不深，所以老理不清思路。核心的方法代码也就10行。不知道别人是怎么做的，希望高手给提供新的思路。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #00ffff;"><strong><em><span style="color: #333300;">八皇后问题是一个古老而著名的问题，是回溯算法的典型例题。该问题是十九世纪著名的数学家高斯1850年提出：在8X8格的国际象棋上摆放八个皇后，使其不能互相攻击，即任意两个皇后都不能处于同一行、同一列或同一斜线上，问有多少种摆法。<br />高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解，后来有人用图论的方法解出92种结果。</span><br /></em></strong>&nbsp;&nbsp;&nbsp;</span>&nbsp;</p>
<pre name="code" class="java">package U4;

public class 八皇后 {
	static boolean[][] hh=new boolean[8][8];//8*8棋盘
	static int count=0;//已经放上的皇后数
	static int num=0;//摆放方式的总数
	public boolean tj1(int line){//条件一，判断此列是否有摆放皇后
		for(int i=0;i&lt;8;i++){
			if(hh[i][line]==true){
				return false;
			}
		}
		return true;
	}
	public boolean tj2(int k,int m){//条件二，判断对角线是否有摆放皇后
		int i,j;
		for(i=k,j=m;i&lt;8&amp;&amp;j&lt;8;i++,j++){
			if(hh[i][j]==true){
				return false;
			}
		}
		for(i=k,j=m;i&gt;=0&amp;&amp;j&gt;=0;i--,j--){
			if(hh[i][j]==true){
				return false;
			}
		}
		for(i=k,j=m;i&gt;=0&amp;&amp;j&lt;8;i--,j++){
			if(hh[i][j]==true){
				return false;
			}
		}
		for(i=k,j=m;i&lt;8&amp;&amp;j&gt;=0;i++,j--){
			if(hh[i][j]==true){
				return false;
			}
		}
		return true;
	}
	//主要的递归实现方法
	public void mk(int line){
		if(line==8) return;//超过8行则退出
		for(int i=0;i&lt;8;i++){
			if(tj1(i)&amp;&amp;tj2(line,i)){
				hh[line][i]=true;
				count++;
				if(count==8){
					System.out.println("\r\n");
					pr();//摆放皇后8个则打印结果
					hh[line][i]=false;//再次寻找其他情况
					count--;
					continue;
				}
				mk(line+1);//递归
				hh[line][i]=false;
				count--;
			}
		}
		return;
	}
	public void pr(){//打印满足条件的摆放方法
		num++;
		System.out.println("&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;"+num+"&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;");
		for(int i=0;i&lt;8;i++){
			System.out.println();
			for(int j=0;j&lt;8;j++){
				if(hh[i][j]==true){
					System.out.print("◆ ");
				}
				else{
					System.out.print("○ ");
				}
			}
		}
	}
	public static void main(String[] args) {
		new 八皇后().mk(0);
		System.out.println("\r\n\r\nnum = "+num);
	}

}
</pre>
<p>&nbsp;</p>
<div class="quote_title">部分结果 写道</div>
<div class="quote_div">&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;88&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; <br /><br />○ ○ ○ ○ ○ ○ ◆ ○ <br />○ ○ ○ ○ ◆ ○ ○ ○ <br />○ ○ ◆ ○ ○ ○ ○ ○ <br />◆ ○ ○ ○ ○ ○ ○ ○ <br />○ ○ ○ ○ ○ ◆ ○ ○ <br />○ ○ ○ ○ ○ ○ ○ ◆ <br />○ ◆ ○ ○ ○ ○ ○ ○ <br />○ ○ ○ ◆ ○ ○ ○ ○ <br /><br />&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;89&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; <br /><br />○ ○ ○ ○ ○ ○ ○ ◆ <br />○ ◆ ○ ○ ○ ○ ○ ○ <br />○ ○ ○ ◆ ○ ○ ○ ○ <br />◆ ○ ○ ○ ○ ○ ○ ○ <br />○ ○ ○ ○ ○ ○ ◆ ○ <br />○ ○ ○ ○ ◆ ○ ○ ○ <br />○ ○ ◆ ○ ○ ○ ○ ○ <br />○ ○ ○ ○ ○ ◆ ○ ○ <br /><br />&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;90&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; <br /><br />○ ○ ○ ○ ○ ○ ○ ◆ <br />○ ◆ ○ ○ ○ ○ ○ ○ <br />○ ○ ○ ○ ◆ ○ ○ ○ <br />○ ○ ◆ ○ ○ ○ ○ ○ <br />◆ ○ ○ ○ ○ ○ ○ ○ <br />○ ○ ○ ○ ○ ○ ◆ ○ <br />○ ○ ○ ◆ ○ ○ ○ ○ <br />○ ○ ○ ○ ○ ◆ ○ ○ <br /><br />&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;91&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; <br /><br />○ ○ ○ ○ ○ ○ ○ ◆ <br />○ ○ ◆ ○ ○ ○ ○ ○ <br />◆ ○ ○ ○ ○ ○ ○ ○ <br />○ ○ ○ ○ ○ ◆ ○ ○ <br />○ ◆ ○ ○ ○ ○ ○ ○ <br />○ ○ ○ ○ ◆ ○ ○ ○ <br />○ ○ ○ ○ ○ ○ ◆ ○ <br />○ ○ ○ ◆ ○ ○ ○ ○ <br /><br />&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;92&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; <br /><br />○ ○ ○ ○ ○ ○ ○ ◆ <br />○ ○ ○ ◆ ○ ○ ○ ○ <br />◆ ○ ○ ○ ○ ○ ○ ○ <br />○ ○ ◆ ○ ○ ○ ○ ○ <br />○ ○ ○ ○ ○ ◆ ○ ○ <br />○ ◆ ○ ○ ○ ○ ○ ○ <br />○ ○ ○ ○ ○ ○ ◆ ○ <br />○ ○ ○ ○ ◆ ○ ○ ○ <br /><br />num = 92 <br /></div>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://lucene-group.group.javaeye.com/group/blog/190709#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 07 May 2008 20:42:19 +0800</pubDate>
        <link>http://lucene-group.group.javaeye.com/group/blog/190709</link>
        <guid>http://lucene-group.group.javaeye.com/group/blog/190709</guid>
      </item>
          <item>
        <title>华为5分钟的编程题</title>
        <author>zwm512327</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zwm512327.javaeye.com">zwm512327</a>&nbsp;
                    链接：<a href="http://lucene-group.group.javaeye.com/group/blog/188906" style="color:red;">http://lucene-group.group.javaeye.com/group/blog/188906</a>&nbsp;
          发表时间: 2008年05月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>去华为面试的一道编程题，要求五分钟写一个程序。把一个输入的数字完全逆转。比如输入25679，返回97652。我第一想法是用StringBuffer的reverse()一句话就写完了。eg：StringBuffer stb=new StringBuffer("3d3a555445");<br />&nbsp;&nbsp;stb.reverse();然后在先转成String类型，逆转后再转回去。结果面试官说，不能用Java的类库方法。顿时压力就有点大了。然后想先解析成字符用Vector来存储，可以知道长度，比数组简单，应该也能很快搞定。面试官看了下说还是不行，我就说我只是把Vector当数组来使用还不行？他说压根不允许用数组。当时头就大了。数组都不让用那怎么做啊。结果他说不用数组反而一下激发了我，这题就很简单，不让用数组是因为就用不着。想通了算法就简单了，不是五分钟的问题。原来写五行代码就够了。当时是只写了一个方法，面</p>
<pre name="code" class="java">public class Re {
	public static int reverse(int num){
		int returnNum=0;
		int yuShu=0;
		while(num&gt;9){
			yuShu=num%10;
			num=num/10;
			returnNum=returnNum*10+yuShu;
		}
		return returnNum*10+num;
	}
	public static void main(String[] args) {
		System.out.println(reverse(356212232));
	}

}
</pre>
<p>&nbsp;试完后回家在电脑上加了main方法测了下。</p>
          <br/>
          <span style="color:red;">
            <a href="http://lucene-group.group.javaeye.com/group/blog/188906#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 02 May 2008 19:40:21 +0800</pubDate>
        <link>http://lucene-group.group.javaeye.com/group/blog/188906</link>
        <guid>http://lucene-group.group.javaeye.com/group/blog/188906</guid>
      </item>
          <item>
        <title>用Swing做的文件选择器</title>
        <author>zwm512327</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zwm512327.javaeye.com">zwm512327</a>&nbsp;
                    链接：<a href="http://lucene-group.group.javaeye.com/group/blog/188560" style="color:red;">http://lucene-group.group.javaeye.com/group/blog/188560</a>&nbsp;
          发表时间: 2008年04月30日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div class="quote_title">把我曾经遇到的一些问题跟大家分享下。好多问题教材上找不到答案，当时花费了好多时间，有些是网上查了好久查到的，有些是自己试了好久才明白的。</div>
<p>1）不管屏幕大小，始终把界面显示到屏幕固定比例的位置</p>
<p>2）文件选择器的使用，Java API上讲的太少了，就一个如何使文件选择器显示出来都困扰我很久，不知道大家刚接触时是否有同感。</p>
<p>3）事件处理怎么判断是哪个控件触发了事件。</p>
<p>4）选项卡的使用</p>
<p>5）滚动条的加入</p>
<p>6）鼠标左右键的区分</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; （5）和（6）的问题本程序中不包含。以后补上。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 程序涉及内容包含选项卡布局，文件选择器及一些控件，还包含最简单的事件处理。抛砖引玉，希望对刚学swing及事件驱动的人有所帮助。</p>
<pre name="code" class="java">import java.io.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class YFileChooser implements ActionListener{
	JFrame frame=new JFrame("文件选择器实例");
	JTabbedPane tabPane=new JTabbedPane();//选项卡布局
	Container con=new Container();//布局1
	Container con1=new Container();//布局2
	JLabel label1=new JLabel("选择目录");
	JLabel label2=new JLabel("选择文件");
	JTextField text1=new JTextField();
	JTextField text2=new JTextField();
	JButton button1=new JButton("...");
	JButton button2=new JButton("...");
	JFileChooser jfc=new JFileChooser();//文件选择器
	YFileChooser(){
		jfc.setCurrentDirectory(new File("d:\\"));//文件选择器的初始目录定为d盘
		//下面两行是取得屏幕的高度和宽度
		double lx=Toolkit.getDefaultToolkit().getScreenSize().getWidth();
		double ly=Toolkit.getDefaultToolkit().getScreenSize().getHeight();
		frame.setLocation(new Point((int)(lx/2)-150,(int)(ly/2)-150));//设定窗口出现位置
		frame.setSize(300,150);//设定窗口大小
		frame.setContentPane(tabPane);//设置布局
       //下面设定标签等的出现位置和高宽
		label1.setBounds(10,10,70,20);
		label2.setBounds(10,30,100,20);
		text1.setBounds(80,10,120,20);
		text2.setBounds(80,30,120,20);
		button1.setBounds(210,10,50,20);
		button2.setBounds(210,30,50,20);
		
		button1.addActionListener(this);//添加事件处理
		button2.addActionListener(this);//添加事件处理
		con.add(label1);
		con.add(label2);
		con.add(text1);
		con.add(text2);
		con.add(button1);
		con.add(button2);
		con.add(jfc);
		tabPane.add("目录/文件选择",con);//添加布局1
		tabPane.add("暂无内容",con1);//添加布局2
		frame.setVisible(true);//窗口可见
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//使能关闭窗口，结束程序
	}                             
	public void actionPerformed(ActionEvent e){//事件处理
		if(e.getSource().equals(button1)){//判断触发方法的按钮是哪个
			jfc.setFileSelectionMode(1);//设定只能选择到文件夹
			int state=jfc.showOpenDialog(null);//此句是打开文件选择器界面的触发语句
			if(state==1){
				return;//撤销则返回
			}
			else{
				File f=jfc.getSelectedFile();//f为选择到的目录
				text1.setText(f.getAbsolutePath());
			}
		}
		if(e.getSource().equals(button2)){
			jfc.setFileSelectionMode(0);//设定只能选择到文件
			int state=jfc.showOpenDialog(null);//此句是打开文件选择器界面的触发语句
			if(state==1){
				return;//撤销则返回
			}
			else{
				File f=jfc.getSelectedFile();//f为选择到的文件
				text2.setText(f.getAbsolutePath());
			}
		}
	}
	public static void main(String[] args) {
		new YFileChooser();

	}

}
</pre>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://lucene-group.group.javaeye.com/group/blog/188560#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 30 Apr 2008 21:05:45 +0800</pubDate>
        <link>http://lucene-group.group.javaeye.com/group/blog/188560</link>
        <guid>http://lucene-group.group.javaeye.com/group/blog/188560</guid>
      </item>
          <item>
        <title>如何成为系统架构师</title>
        <author>mfcai</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://staratsky.javaeye.com">mfcai</a>&nbsp;
                    链接：<a href="http://lucene-group.group.javaeye.com/group/blog/188239" style="color:red;">http://lucene-group.group.javaeye.com/group/blog/188239</a>&nbsp;
          发表时间: 2008年04月30日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          3月到5月正是跳槽的时节。<br />  有经验的求职者中会想：我现在虽然还在开发软件，可是我应该及早对人生作出规划呀。可以考虑试试应聘系统架构师。能应聘上，当然好。不能应聘上，也可以积累点经验。<br />  一些公司老板也在考虑，能招到有经验的系统架构师当然好，如果没有，也可以从一些有经验的开发人员中培养。但是，我怎么知道他们是否有这个潜力呢？<br />  我是做java开发的。所以就java方面的系统架构师所要具备的潜力提供一点自己的见解。<br />  首先，是否能成为系统架构师的第一要点，是否善于学习。有的开发人员能力很强，但忽视了自身的学习。总喜欢把过去的经验复制过来。喜欢对现在的管理方法，业务流程进行评头论足。他们经常得出这样的结论就是应该按照他的意见办，否则，项目就会进行不下去。这种类型的人很难真正成为系统架构师。一个员工到了一个新环境，不管他以前开发经验多么丰富，也不管他以前能力是多么强。她都应该多做多听少说，应该尽快的适应这个环境。熟悉公司的开发流程，项目管理方式，开发规范，人员组织，公司的规章制度等。<br />  第二，有较强的工作责任心和敬业精神，具备一定的沟通能力和组织、协调管理能力。不要因为给你分配的任务太简单而不愿做；也不要因为给你分配的任务太复杂而拒绝做。能从简单的工作中发现不为人注意的问题，能将复杂的工作理出头绪来，这就是反映系统架构师的一个能力。有问题应该及时沟通，切忌自己一个人埋头苦干。要对小组的每个成员给与足够的关注和信任。尽量的根据他们每个人的特点安排他们干比较适合自己的工作。<br />  第三，要具备独立分析问题的能力和较强的逻辑表达能力。一有问题就喜欢依赖别人的员工，也很难成为系统架构师。不能坚持自己观点的系统架构师也不是好的系统架构师。要坚持自己观点，这就要求要具备很强的独立分析问题的能力。要学会从正反两方面考虑问题。思想的火花往往是在争论中产生的。要学会在讨论中倾听反方的意见。倾听反方的意见是为了扩大思考的范围，以便更有利于坚持自己的意见。要记住解决问题的方案没有对错，只有优劣。但是在解决问题时，放弃自己的观点，那就是错的。<br />  第四，要有很扎实的专业基础和比较广泛的专业知识。专业基础比如，java语言的核心技术，面向对象的思想、23种设计模式。比较广泛的专业知识：熟悉主流应用服务器，熟悉主流数据库，熟悉J2EE主流架构技术。<br /><br />java应用系统开发中，java系统架构师的具体职责体现在两方面：<br />(1)行业应用架构。行业架构师往往是行业专家，了解行业应用需求，其架构行为主要是将需求进行合理分析布局到应用模型中去，偏向于应用功能布局。建议如果在开发过程中，积累的行业知识足够多，应该朝行业应用架构发展。<br />(2)应用系统技术体系架构。技术架构师往往是技术高手中的高手，掌握各类技术架构、掌握应用设计模式，其架构行为考虑软件系统的高效性、复用性、安全性、可维护性、灵活性、跨平台性等。这类就是我们常说的j2ee系统架构师。
          <br/>
          <span style="color:red;">
            <a href="http://lucene-group.group.javaeye.com/group/blog/188239#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 30 Apr 2008 00:13:36 +0800</pubDate>
        <link>http://lucene-group.group.javaeye.com/group/blog/188239</link>
        <guid>http://lucene-group.group.javaeye.com/group/blog/188239</guid>
      </item>
          <item>
        <title>文件读写实例模板</title>
        <author>zwm512327</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zwm512327.javaeye.com">zwm512327</a>&nbsp;
                    链接：<a href="http://lucene-group.group.javaeye.com/group/blog/188173" style="color:red;">http://lucene-group.group.javaeye.com/group/blog/188173</a>&nbsp;
          发表时间: 2008年04月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>在公司经常做一些文件分析及修改的工具。大多数的同事用vb，也有人用perl。我刚开始也学着用vb和perl来做。后来做了几次后发现，对于文件操作和字符串匹配Java更有优势。perl的正则表达式是很强大，但是一般的应用根本用不着那么深的分析。而vb对于字符串的操作实在是不敢恭维。举个简单的例子，判断一个字符串是否包含一个子串。java中只需要 <br />String s=&ldquo;Hello，World&rdquo;； <br />if（s.contains("llo")){}就可以了 <br />而vb则需要先判断子串在全串中的位置，根据返回的值来判断是否包含。vb中连截取子串都感觉很繁琐。perl语言实在是太随心所欲了，好多的东西是用特定的符合来表示，极其考验我的记忆力。 <br />下面写个简单的文件读写操作，算是我工作常用的一个模板。包括了文件过滤器，目录及文件的递归遍历，文件的读写操作和字符串的分析。没有好的例子，所以不用到正则表达式，其实Java中也有正则表达式匹配的内容。不过根据个人经验，String类的方法已经足够强大。文件读写用的是字符流（以前老搞不清楚字符流跟字节流到底指什么，工作后才恍然大悟） <br />程序从目录开始分析，通过文件过滤器把根目录中的文件（包括子目录）放入文件数组。如果是目录递归执行上一过程，文件则进行读取操作。 <br />Java把目录也看做文件，可以用.isDirectory（）方法来判断是否目录</p>
<pre name="code" class="java">import java.io.*;
class EFileFilter implements FileFilter{//一个文件过滤器
	public boolean accept(File f){
		if(!f.getName().endsWith(".java")){//这里设计过滤文件的规则
			return true;
		}
		return false;
	}
}
public class RFile {
	public static void directory(File f){//目录分析操作
		File[] fl=f.listFiles(new EFileFilter());//将目录中的文件用过滤器过滤后的文件赋给fl数组。
		//File[] fl=f.listFiles();如果不带参数则把目录中的所有文件赋给fl文件数组。
		for(int i=0;i&lt;fl.length;i++){
			if(fl[i].isDirectory()){//如果此文件是目录的话，递归调用directory（）方法，使能够遍历
				directory(fl[i]);//递归
			}
			else{
				readFile(fl[i]);//进入单个文件的读写操作
			}
		}
	}
	public static void readFile(File f){//单个文件的读写操作
		try{
			StringBuffer stb=new StringBuffer();//相比String能提高较大的性能，这点在做Lucene时候体会较深
			File newD=new File("d:\\new\\");//新文件存放的目录
			if(!newD.isDirectory()){
				newD.mkdirs();//如果目录不存在则创建
			}
			File newFile=new File(newD.getAbsoluteFile()+f.getName());//新文件
			FileWriter fw=new FileWriter(newFile);//文件写字符流
			BufferedReader br=new BufferedReader(new FileReader(f));//文件读字符流
			String s;
			while((s=br.readLine())!=null){
				System.out.println(s);//打印文件的内容	
				if(bString(s)){//调用分析字符串的方法
					stb.append(s);//如果满足条件则写到新文件中
				}
			}
			fw.append(stb);
			fw.close();//一定要记得关闭
		}catch(Exception e){
			e.printStackTrace();
		}
	}
	public static boolean bString(String s){
		//对于String，java有很多实用的方法，可以去查文档，下边注释掉的是我工作中经常用到的一些
		/*if(s.startsWith("")||s.endsWith("")||s.contains("")||s.charAt(4)=='a'){
			return true;
		}*/
		return true;
	}
	public static void main(String[] args) {
		File fd=new File("d:\\");//定义要分析的目录
		directory(fd);//从目录开始执行
	}

}
</pre>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://lucene-group.group.javaeye.com/group/blog/188173#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 29 Apr 2008 20:32:27 +0800</pubDate>
        <link>http://lucene-group.group.javaeye.com/group/blog/188173</link>
        <guid>http://lucene-group.group.javaeye.com/group/blog/188173</guid>
      </item>
          <item>
        <title>尝试使用fuzzyquery分析中文字符的相似度</title>
        <author>lang</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lang.javaeye.com">lang</a>&nbsp;
                    链接：<a href="http://lucene-group.group.javaeye.com/group/blog/187847" style="color:red;">http://lucene-group.group.javaeye.com/group/blog/187847</a>&nbsp;
          发表时间: 2008年04月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          需要对一些数据进行去掉重复处理，规则类似于，两条记录的名称和地址相似度很大，则认为是同样的，应该去掉当中的某一个。昨天晚上翻了lucene得书籍，想找找看有什么好的方法没有，最后决定尝试一下fuzzyquery，大早上的就写了一个，结果很让我莫名其妙！<br />    代码如下：<br />     <pre name="code" class="java">

public class FuzzyQueryTest {

	public static void main(String[] args) {
		RAMDirectory directory = new RAMDirectory();
		try {
			IndexWriter indexWriter = new IndexWriter(directory,
					new MMAnalyzer(), true);
			Document document1 = new Document();
			Document document2 = new Document();
			Document document3 = new Document();
			Document document4 = new Document();
			Field f1 = new Field("content", "北京科技大学", Field.Store.YES,
					Field.Index.TOKENIZED);
			Field f2 = new Field("content", "北京语言大学", Field.Store.YES,
					Field.Index.TOKENIZED);
			Field f3 = new Field("content", "中国科技大学", Field.Store.YES,
					Field.Index.TOKENIZED);
			Field f4 = new Field("content", "北京大学科技馆", Field.Store.YES,
					Field.Index.TOKENIZED);
			document1.add(f1);
			document2.add(f2);
			document3.add(f3);
			document4.add(f4);
			indexWriter.addDocument(document4);
			indexWriter.addDocument(document3);
			indexWriter.addDocument(document2);
			indexWriter.addDocument(document1);
			indexWriter.close();
			// search
			IndexSearcher indexSearcher = new IndexSearcher(directory);
			Term term = new Term("content", "北京语言大学");
			FuzzyQuery fuzzyQuery = new FuzzyQuery(term);
			Hits hits = indexSearcher.search(fuzzyQuery);
			for (int i = 0; i &lt; hits.length(); i++) {
				System.out.println(hits.doc(i));
				System.out.println(hits.score(i));
				Explanation explanation = indexSearcher.explain(fuzzyQuery, i);
				System.out.println(explanation.toString());
				System.out.println("-----------------");
			}
		} catch (CorruptIndexException e) {
			e.printStackTrace();
		} catch (LockObtainFailedException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

      </pre><br /><br /><br />结果是空，如果只是搜索大学或者北京，是有结果的。但是，怎么看这个结果都不能够满足我那个排重的需求阿！<br />各位，有什么好的建议！指导一下！<br /><br />自己修正一下我自己提出的问题，我提出的问题实际上是比较两个字符的相似度。对于这个问题，doris给出的解释思路是使用lcss找到最大的匹配字符串。我正在考虑，找到最大字符串后，怎么通过某种机制来衡量和原来字符相似的评分！
          <br/>
          <span style="color:red;">
            <a href="http://lucene-group.group.javaeye.com/group/blog/187847#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></