知识大全 用Java+MySQL+PHP轻松构建跨平台的搜索引擎

Posted

篇首语:亦余心之所善兮,虽九死其犹未悔。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 用Java+MySQL+PHP轻松构建跨平台的搜索引擎相关的知识,希望对你有一定的参考价值。

用Java+MySQL+PHP轻松构建跨平台的搜索引擎  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  此搜索引擎适于在一个中等规模的局域网中使用 由于找到的网页存在数据库中 不仅可以索静态的HTML页面 可以搜索php asp等动态页面 对于一个拥有 万个网页的系统(使用PII 作为服务器) 搜索响应时间在 秒左右 完全可以满足要求 由于Java MySQL PHP都是跨平台的软件 所以此搜索引擎不仅可以工作在Windows服务器上 而且也可以工作在Linux等其他系统中   一 建立搜索引擎需要的数据库和数据表   首先建立数据库   c:\\mysql\\bin\\> mysqladmin uroot pmypasswd create Spider  然后建立数据库中的表结构  c:\\mysql\\bin\\> mysql uroot pmypasswd Spider < Spider mysql  其中Spider mysql为一个文本文件 其内容如下   CREATE TABLE link (  Id int( ) unsigned NOT NULL auto_increment   Url varchar( ) NOT NULL   Class tinyint( ) unsigned NOT NULL default   IsSearchLink tinyint( ) unsigned default   PRIMARY KEY (Url)   UNIQUE Id (Id)   KEY Url (Url)   KEY Class (Class)  );   # 本局域网的初始主页地址 搜索蜘蛛从此网址开始搜索所有其他网页  INSERT INTO link VALUES( HTTP:// / );   # 数据表 webpagelocal 用来存放下载的所有的网页  CREATE TABLE webpagelocal (  Id int( ) unsigned NOT NULL auto_increment   Url varchar( ) NOT NULL   Content text NOT NULL   PRIMARY KEY (Url)   UNIQUE Id (Id)   KEY Url (Url)  );   # 数据表 webpagefindfast   # 用MakeFast php从表webpagelocal中提取 字节的检索信息存放其中  CREATE TABLE webpagefindfast (  Id int( ) unsigned NOT NULL   Url varchar( ) NOT NULL   Title varchar( )   Content blob   PRIMARY KEY (Url)   KEY Url (Url)   KEY Title (Title)  );   二 以下为搜索网页和下载网页至本地数据库的Java程序LinkToDB java 它也是此搜索引擎的核心和基础    /***************************** LinkToDB java ***********************************  *  * 对URL中的链接进行分析 将相对路径转换为绝对路径 排序方式输出结果到数据库   *  * 如果分析得到的URL是Link表中唯一的 就将其内容下载到表 WebPageLocal 中   *  ********************************************************************************  /  import java io *;  import java util *;  import *;  import java lang String;  import java sql *;  import java text *;    class Counter   private int i = ;  int read() return i;   void increment() i++;       public class LinkToDB   String UrlHost = ;  String UrlFile = ;  String UrlPath = ;  static String StartWith = null;  boolean outsideTag = true; //判断是否在标记之中  static char[] buffer = new char[ ]; // 缓冲区:用于保存从 URL 读的数据  InputStreamReader read = null;  BufferedReader reader = null;  URLConnection uc = null;  private URL url = null;  private StreamTokenizer st;  private TreeMap counts = new TreeMap();//以排序方式保存找到的链接    LinkToDB(String myurl String StartOnly)  try   StartWith = StartOnly;  if(StartOnly!=null) if(!myurl startsWith(StartOnly)) return; //只搜索此网站  url = new URL(myurl);  UrlHost = url getHost();  UrlHost = UrlHost toUpperCase();  UrlFile = url getFile();  int v=UrlFile lastIndexOf( / );  if(v!= ) UrlPath = UrlFile substring( v);  System out println( 分析文件 +myurl);  int uclength= ;  int ucError= ;  try   uc = url openConnection();  uc setUseCaches(false);  nnect();    catch(IOException io) ucError= ; System out println( 打不开待分析网页: +myu  rl);   if(ucError!= )  uclength = uc getContentLength();  if (uclength< )   try read = new InputStreamReader(url openStream());   catch(IOException io) System out println( 流打开错误: +myurl);    else System out println( 文件太大 不分析 );    if(read!=null)  reader=new BufferedReader(read);   if(reader!=null)  st = new StreamTokenizer(reader);  st resetSyntax(); // 重置语法表  st wordChars( ); // 令牌范围为全部字符  st ordinaryChar( < ); // HTML标记两边的分割符  st ordinaryChar( > );        catch(MalformedURLException e) System out println( Malformed URL String! );     void cleanup()   try read close();   catch(IOException e) System out println( 流关闭错误 );     void countWords()   try   while(st nextToken()!=StreamTokenizer TT_EOF)   String s = ;  String s_NoCase= ;  switch(ype)   case < : //入标记字段  outsideTag=false;  continue; //countWords();  case > : //出标记字段  outsideTag=true;  continue; //countWords();  case StreamTokenizer TT_EOL: s = new String( EOL ); break;  case StreamTokenizer TT_WORD: if(!outsideTag) s = st sval; /*已经是字符  串*/ break;  default: s = ;// s = String valueOf((char)ype);/*单一字符*/    if(outsideTag) continue;//出了标记区域(<a >)  String s = ;  s_NoCase = s trim();  s =s_NoCase toUpperCase();  if(s startsWith( A )||s startsWith( AREA )||s startsWith( FRAME )||s s  tartsWith( IFRAME )) //以这些开始的都是超级链接  int HREF_POS = ;  if(s startsWith( FRAME )||s startsWith( IFRAME ))   HREF_POS = s indexOf( SRC= );  s = s substring(HREF_POS+ ) trim();  s_NoCase=s_NoCase substring(HREF_POS+ ) trim();    else   HREF_POS=s indexOf( HREF= );  s =s substring(HREF_POS+ ) trim();  s_NoCase=s_NoCase substring(HREF_POS+ ) trim();    if(HREF_POS!= )   if(s startsWith( \\ ))   s =s substring( );s_NoCase=s_NoCase substring( );  int QUOTE=s indexOf( \\ );  if(QUOTE!= )   s =s substring( QUOTE) trim();s_NoCase=s_NoCase substring( QUOTE) trim  ();  int SPACE=s indexOf( );  if(SPACE!= )   s =s substring( SPACE) trim();s_NoCase=s_NoCase substring( SPACE) trim  ();  if(s endsWith( \\ ))   s =s substring( s length() );s_NoCase=s_NoCase substring( s_NoCase l  ength() );  if(s indexOf( )!= ||s indexOf( JAVASCRIPT: )!= ||s indexOf( )!=   )  s = ;s_NoCase= ; //有这些符号 认为非合法链接 两点表示上一目录 而我  只想向下级查找  if ( !s startsWith( FTP:// ) &&//以下后缀或前缀通常非网页格式  !s startsWith( FTP:// ) &&  !s startsWith( MAILTO: ) &&  !s endsWith( SWF ) &&  !s startsWith( / )) //因 /表示上一目录 通常只需考虑本级和下N级目录  s=s ;  if (!s startsWith( HTTP:// )&&!s equals( )) s=UrlHost+UrlPath+ / +s;s_No  Case=UrlHost+UrlPath+ / +s_NoCase;  else if(s startsWith( / )) s=UrlHost+s;s_NoCase=UrlHost+s_NoCase;  if(s startsWith( HTTP:// )) s=s substring( );s_NoCase=s_NoCase substring(   );  int JinHao=s indexOf( # ); //如果含有 # 号 表示有效的链接是此前的部分  if(JinHao!= ) s=s substring( JinHao) trim();s_NoCase=s_NoCase substring(   JinHao) trim();  int H= ; //以下将/ /转换为/  for(int m= ;m< ;m++)  H=s indexOf( / / );  if(H!= ) s=s substring( H)+s substring(H+ );s_NoCase=s_NoCase substring  ( H)+s_NoCase substring(H+ );    int TwoXG= ; //以下将//转换为/  for(int m= ;m< ;m++)  TwoXG=s indexOf( // );  if(TwoXG!= ) s=s substring( TwoXG)+s substring(TwoXG+ );s_NoCase=s_NoCa  se substring( TwoXG)+s_NoCase substring(TwoXG+ );    int OneXG=s indexOf( / );  if(OneXG== ) s=s+ / ;s_NoCase+= / ; //将xx xx xx xxx转换为xx xx xx xxx/的  标准形式 cha138/Article/program/Java/JSP/201311/19732

相关参考

知识大全 在windows平台上构建自己的PHP实现方法(仅适用于php5.2)

在windows平台上构建自己的PHP实现方法(仅适用于php5.2)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶

知识大全 轻松实现Java用户界面编程

轻松实现Java用户界面编程  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Buoy是一个构建在

知识大全 用MySQL和PHP创建XML

用MySQL和PHP创建XML  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  XML是作为数据交

知识大全 用PHP连mysql和oracle数据库性能比较

用PHP连mysql和oracle数据库性能比较  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 用Java Servlet构建旗帜广告系统

用JavaServlet构建旗帜广告系统  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  对于一个

知识大全 使用PHP 5.0 轻松解析XML文档(1)

使用PHP5.0轻松解析XML文档(1)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  用sax

知识大全 学者之win2k+mysql+php4快速安装

  我的php和mysql的软件包是phpplWinzipmysqlbetawinzip  先安装mysql用winzip打开软件包进行完全安装默认安装路径为:c:\\mysql  安装完成后打开开始

知识大全 mac下配置nginx+php+mysql方法说明

本文章来给各位同学介绍mac下配置nginx+php+mysql方法有需要了解的同学可进入参考额本来以为mac下可以用lnmp一键安装包的但是使用后才发现竟然不行后来使用了大家都推荐的homebrew

知识大全 用PHP+java实现自动新闻滚动窗口

用PHP+java实现自动新闻滚动窗口  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  showp

知识大全 从MySQL导出XLS数据库工具(跨平台)

从MySQL导出XLS数据库工具(跨平台)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  这个脚