【IT168技术文档】
最近在做.Text Blog的Wap版,因为手机上输入比电脑上更难,所以,如果用户手动输入地址访问Blog的话,会对没有意义又繁长的URL非常反感,所以,花了点时间做了.Text对二级域名的支持并对其地址分析功能做了些优化,可是做好后发现,.Text的搜索引擎并不支持这种域名方式,没办法,只好对它的搜索引索又动了点小手术。(博客园现在有点慢啊)
1、对Web.config的修改:
2、将Dottext.Search.EntryData类的CreateDoc(IDataReader reader)方法改成这样<SearchConfiguration type="Dottext.Search.SearchConfiguration, Dottext.Search" urlFormat="http://{1}{0}/Blog/{2}/{3}.aspx" virtualPath="~/SearchIndex" physicalPath="D:\Code\MSS1\Blog\DotTextWeb\SearchIndex" domains=".tzl.com" pageSize="20" />
private Document CreateDoc(IDataReader reader) { //Null values are not allowed in the index Document doc = new Document(); try { doc.Add(Field.Text(SearchConfiguration.Author,(string)reader["Author"])); doc.Add(Field.Text(SearchConfiguration.Title,(string)reader["Title"])); string body = (string)reader["Text"]; doc.Add(Field.UnIndexed(SearchConfiguration.Body,body)); doc.Add(Field.Text(SearchConfiguration.Link,string.Join(" ",GetLinks(body)))); doc.Add(Field.Text(SearchConfiguration.RawPost,regexStripHTML.Replace(body,string.Empty))); DateTime dateCreated = (DateTime)reader["DateAdded"]; doc.Add(Field.UnIndexed(SearchConfiguration.DateCreated,dateCreated.ToLongDateString())); string app = (string)reader["Application"]; doc.Add(Field.Text(SearchConfiguration.Blog,app)); //Do we really need this? //doc.Add(Field.Text(SearchConfiguration.Description,reader["Description"].ToString())); string host = (string)reader["Host"]; doc.Add(Field.Text(SearchConfiguration.Domain,host)); int posttype = (int)reader["PostType"]; doc.Add(Field.UnIndexed(SearchConfiguration.PostType,posttype.ToString())); string permaLink = null; SearchConfiguration searchConfig = SearchConfiguration.Instance(); if((PostType)posttype == PostType.BlogPost) { //permaLink = string.Format(SearchConfiguration.Instance().UrlFormat,host,app, "archive/" + dateCreated.ToString("yyyy'/'MM'/'dd"),reader["EntryID"]); permaLink = string.Format(searchConfig.UrlFormat,searchConfig.Domains,app, "archive/" + dateCreated.ToString("yyyy'/'MM'/'dd"),reader["EntryID"]); } else if((PostType)posttype == PostType.Comment) { permaLink = reader["SourceUrl"].ToString()+"#"+reader["EntryID"].ToString(); } else { //permaLink = string.Format(SearchConfiguration.Instance().UrlFormat,host,app, "articles",reader["EntryID"]); permaLink = string.Format(searchConfig.UrlFormat,searchConfig.Domains,app, "articles",reader["EntryID"]); } int feedbackCount = (int)reader["FeedbackCount"]; int webviewCount = (int)reader["WebViewCount"]; int boost = weighter.Calculate(body.Length,feedbackCount,webviewCount,dateCreated,(PostType)posttype); doc.SetBoost(boost); doc.Add(Field.UnIndexed(SearchConfiguration.BoostFactor,boost.ToString())); doc.Add(Field.UnIndexed(SearchConfiguration.PermaLink,permaLink)); } catch(Exception e) { Dottext.Framework.Logger.LogManager.Log("CreateDoc Fail","EntryID is "+reader["EntryID"]); } return doc; }