基于lucene的全文搜索,才开始搞lucene,好像还有个基于lucene的solr

  1 package com.taixin.action;
  2 
  3 import java.io.File;
  4 import java.io.IOException;
  5 import java.io.StringReader;
  6 import java.util.ArrayList;
  7 import java.util.List;
  8 
  9 import javax.servlet.http.HttpServletRequest;
 10 import javax.servlet.http.HttpServletResponse;
 11 import javax.servlet.http.HttpSession;
 12 
 13 import org.apache.lucene.analysis.Analyzer;
 14 import org.apache.lucene.analysis.TokenStream;
 15 import org.apache.lucene.analysis.standard.StandardAnalyzer;
 16 import org.apache.lucene.document.Document;
 17 import org.apache.lucene.document.Field;
 18 import org.apache.lucene.index.DirectoryReader;
 19 import org.apache.lucene.index.IndexReader;
 20 import org.apache.lucene.index.IndexWriter;
 21 import org.apache.lucene.index.IndexWriterConfig;
 22 import org.apache.lucene.queryparser.classic.MultiFieldQueryParser;
 23 import org.apache.lucene.queryparser.classic.QueryParser;
 24 import org.apache.lucene.search.IndexSearcher;
 25 import org.apache.lucene.search.Query;
 26 import org.apache.lucene.search.ScoreDoc;
 27 import org.apache.lucene.search.TopDocs;
 28 import org.apache.lucene.search.highlight.Highlighter;
 29 import org.apache.lucene.search.highlight.QueryScorer;
 30 import org.apache.lucene.search.highlight.SimpleFragmenter;
 31 import org.apache.lucene.search.highlight.SimpleHTMLFormatter;
 32 import org.apache.lucene.store.Directory;
 33 import org.apache.lucene.store.FSDirectory;
 34 import org.apache.lucene.util.Version;
 35 import org.apache.struts2.interceptor.ServletRequestAware;
 36 import org.apache.struts2.interceptor.ServletResponseAware;
 37 
 38 import com.opensymphony.xwork2.ActionSupport;
 39 import com.taixin.pojo.FullTextSearch;
 40 import com.taixin.service.FullTextSearchService;
 41 
 42 /**
 43  * @description 全文搜索Action类
 44  * 
 45  * @date 2013/07/18 16:33
 46  * 
 47  * @author Teach3
 48  *
 49  */
 50 public class FullTextSearchAction extends ActionSupport implements ServletRequestAware,ServletResponseAware {
 51 
 52     private static final long serialVersionUID = 1L;
 53     
 54     private FullTextSearchService fullTextSearchService;
 55     
 56     private List<FullTextSearch> fullTextSearchList;//文件集合,用于存储查询后的所有文件
 57     private List<FullTextSearch> fullTextSearchListForIndex;//文件集合,用于存储索引查询后的所有文件
 58     
 59     private FullTextSearch fullTextSearch;//全文搜素实体对象,添加或者修改直接操作该对象
 60     
 61     private String searchWord;//搜索关键字
 62     
 63     protected HttpServletRequest request;
 64     protected HttpServletResponse response;
 65     protected HttpSession session;
 66     
 67     /**
 68      * 查询所有文件
 69      * @return fullTextSearchMain 查询后返回到文件列表页面
 70      */
 71     public String initMain(){
 72         
 73         fullTextSearchList = fullTextSearchService.queryAllFile();
 74         
 75         return "fullTextSearchMain";
 76     }
 77     
 78     /**
 79      * 跳转到添加页面
 80      * @return docPreviewAdd 跳转到添加页面
 81      */
 82     public String initAddFile(){
 83         return "fullTextSearchAdd";
 84     }
 85     
 86     /**
 87      * 添加文件
 88      * @return toFullTextSearchMain 添加完成后返回到文件列表页面
 89      */
 90     public String doAddFile(){
 91         
 92         fullTextSearchService.addFile(fullTextSearch);
 93         return "toFullTextSearchMain";
 94     }
 95     
 96     /**
 97      * 跳转到修改页面
 98      * @return fullTextSearchUpdate  跳转到修改页面
 99      */
100     public String initUpdFile(){
101         fullTextSearch = fullTextSearchService.queryFileByFileId(fullTextSearch.getFileId());
102         return "fullTextSearchUpdate";
103     }
104     
105     /**修改文件
106      * @return 修改完成后跳转到文件列表页面
107      */
108     public String doUpdFile(){
109         
110         fullTextSearchService.updateFile(fullTextSearch);
111         return "toFullTextSearchMain";
112     }
113     
114     
115     //搜索
116     @SuppressWarnings({ "deprecation"})
117     public String search() {
118         String[] queryString={"fileContent"};//指定查询对象, 此处是文件内容
119         Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_43);//创建分析器对象  
120         String indexDir = "d:/Index4Field";//指定索引文件夹名称和位置
121         File f = new File(indexDir);
122         if(!f.exists()){//若索引文件夹不存在则创建它
123             f.mkdir();
124         }
125         IndexReader reader = null;
126         try {
127             Directory dir = FSDirectory.open(f);
128             IndexWriterConfig indexWriterConfig = new IndexWriterConfig(Version.LUCENE_43, analyzer);  
129             indexWriterConfig.setOpenMode(IndexWriterConfig.OpenMode.CREATE); 
130             IndexWriter writer = new IndexWriter(dir, indexWriterConfig);  
131             fullTextSearchList = fullTextSearchService.queryAllFile();
132             for (int i = 0; i < fullTextSearchList.size(); i++) {
133                 Document doc = new Document();
134                 doc.add(new Field("fileContent",fullTextSearchList.get(i).getFileContent(),Field.Store.YES,Field.Index.ANALYZED));
135                 doc.add(new Field("filesName",fullTextSearchList.get(i).getFilesName(),Field.Store.YES,Field.Index.ANALYZED));
136                 doc.add(new Field("fileBz",fullTextSearchList.get(i).getFileBz(),Field.Store.YES,Field.Index.ANALYZED));
137                 writer.addDocument(doc);
138             }
139             writer.close();
140             
141             reader = DirectoryReader.open(FSDirectory.open(f));    
142             IndexSearcher searcher = new IndexSearcher(reader);
143             QueryParser queryParser = new MultiFieldQueryParser(Version.LUCENE_43, queryString, analyzer); 
144             if (searchWord != null && !searchWord.trim().equals("")) {
145                 Query query = queryParser.parse(searchWord);
146                 TopDocs docs = searcher.search(query, 20);//
147                 ScoreDoc[] hits = docs.scoreDocs;
148                 // 用这个进行高亮显示,<b><font color='red'>......</font></b>,这个样式可以自己定义
149                 SimpleHTMLFormatter simpleHTMLFormatter = new SimpleHTMLFormatter("<b><font color='red'>", "</font></b>");
150                 Highlighter highlighter = new Highlighter(simpleHTMLFormatter, new QueryScorer(query));
151                 highlighter.setTextFragmenter(new SimpleFragmenter(Integer.MAX_VALUE));
152                 fullTextSearchListForIndex = new ArrayList<FullTextSearch>();//用于存储查询索引后的数据集
153                 for (int i = 0; i < hits.length; i++) {
154                     Document document = new Document();
155                     FullTextSearch fullTextSearch = new FullTextSearch();
156                     document = searcher.doc(hits[i].doc);
157                     String fileContent = document.get("fileContent");
158                     if (fileContent!=null) {
159                         TokenStream tokenStream = analyzer.tokenStream("fileContent", new StringReader(fileContent));
160                         String highlighterStr = highlighter.getBestFragment(tokenStream, fileContent);
161                         fullTextSearch.setFileContent(highlighterStr);
162                     }
163                     String filesName = document.get("filesName");
164                     String fileBz = document.get("fileBz");
165                     fullTextSearch.setFileBz(fileBz);
166                     fullTextSearch.setFilesName(filesName);
167                     fullTextSearchListForIndex.add(fullTextSearch);
168                     request.setAttribute("fullTextSearchListForIndex", fullTextSearchListForIndex);
169                 }
170 //                FullTextSearchAction fullTextSearchAction = new FullTextSearchAction();
171 //                fullTextSearchAction.delAllFile(indexDir);
172                 reader.close();
173             }
174         } catch (Exception e) {
175             e.printStackTrace();
176         } finally{
177             if (reader!=null) {
178                 try {
179                     reader.close();
180                 } catch (IOException e) {
181                     e.printStackTrace();
182                 }
183             }
184             
185         }
186         
187         return "fullTextSearchList";
188     }
189     
190     public String doDelFile(){
191         
192         fullTextSearchService.deleteFile(fullTextSearch.getFileId());
193         return "toFullTextSearchMain";
194     }
195     
196     /**
197      * 删除指定文件夹下的所有文件
198      * @param path 文件夹所在的路径
199      */
200     public static boolean delAllFile(String path) {
201         boolean flag = false;
202         File file = new File(path);
203         if (!file.exists()) {
204             return flag;
205         }
206         if (!file.isDirectory()) {
207             return flag;
208         }
209         String[] tempList = file.list();
210         File temp = null;
211         for (int i = 0; i < tempList.length; i++) {
212             if (path.endsWith(File.separator)) {
213                 temp = new File(path + tempList[i]);
214             } else {
215                 temp = new File(path + File.separator + tempList[i]);
216             }
217             if (temp.isFile()) {
218                 temp.delete();
219             }
220             if (temp.isDirectory()) {
221                 delAllFile(path + "/" + tempList[i]);// 删除文件夹里面的文件
222                 flag = true;
223             }
224         }
225         return flag;
226     }
227     
228     public FullTextSearchService getFullTextSearchService() {
229         return fullTextSearchService;
230     }
231 
232     public void setFullTextSearchService(FullTextSearchService fullTextSearchService) {
233         this.fullTextSearchService = fullTextSearchService;
234     }
235 
236     public List<FullTextSearch> getFullTextSearchList() {
237         return fullTextSearchList;
238     }
239 
240     public void setFullTextSearchList(List<FullTextSearch> fullTextSearchList) {
241         this.fullTextSearchList = fullTextSearchList;
242     }
243 
244     public FullTextSearch getFullTextSearch() {
245         return fullTextSearch;
246     }
247 
248     public void setFullTextSearch(FullTextSearch fullTextSearch) {
249         this.fullTextSearch = fullTextSearch;
250     }
251 
252     public String getSearchWord() {
253         return searchWord;
254     }
255 
256     public void setSearchWord(String searchWord) {
257         this.searchWord = searchWord;
258     }
259     
260     public void setServletRequest(HttpServletRequest httpRequest) {
261         request = httpRequest;
262         session = request.getSession();
263     }
264 
265     public void setServletResponse(HttpServletResponse httpResponse) {
266         response = httpResponse;
267     }
268 }

 

代码也看不懂啊

写点文档说明啥的

全文检索

1.开发环境

a.操作系统:Windows 7   64位

b.开发工具: MyEclipse 10,Tomcat7,JDK7,sqlserver2008R2

c.开发框架Struts-2.3.15,hibernate-4.2.3,spring-3.2.3

d.所需第三方软件或依赖包及对应的版本号

1). lucene-4.3.1.tgz,

2.开发步骤

a.开发简介

全文检索是指计算机索引程序通过扫描文章中的每一个词或者每一个字,甚至一句话,对每一个词,每一个字,一句话,建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。这个过程类似于通过字典中的检索字表查字的过程.

我们是使用lucene全文检索技术,目前lucene最新版本是4.3.1

Lucene是一个全文搜索框架,而不是应用产品。因此它并不像www.baidu.com 或者google Desktop那么拿来就能用,它只是提供了一种工具让你能实现这些产品。在此之上的又solr,是基于lucene再开发的一个全文检索框架

网址http://lucene.apache.org/ ,

下载地址: http://mirror.bjtu.edu.cn/apache/lucene/java/4.3.1/

b.开发步骤

  1. 创建索引,因为检索的实质就是在检索索引,可以对文件,数据库创建索引,demo中是对数据库创建索引,
  2. 查询,根据页面用户输入的关键字,查询上一步创建好的索引,并将关键字高亮显示

 

 

3.具体的开发细节

a.备注说明

以下具体的开发步骤是基于SVN上成型的demo而言,个人可根据自己电脑的相关环境自行定义

b. 搭建一个SSH(struts,hibernate,spring框架)

因为该技术demo是基于SSH架构,SSH版本可参见第一章的开发环境,SVN上的技术demo项目名: FULL_TEXT_SEARCH_DEMO

 

 

c.导入相关资源文件到项目中

  1.在WebContent创建一个search文件夹,该文件夹包含如下内容文件:

 

该文件包换了全文检索demo所需的jsp页面(增删改查)。

2编写java代码

导入项目所需的依赖jar包到web应用的lib文件夹下,并配置好应用的web.xml文件,具体配置可参考SVN的demo。

demo是基于SSH三层架构,所以要完成service和dao接口和实现类的编码,然后再编写action层,配置好struts.xml文件,项目结构如下:

 

 

1).全文检索最重要的是创建索引和检索索引,现将lucene加以说明

1 lucene的工作方式
lucene提供的服务实际包含两部分:一入一出。所谓入是写入,即将你提供的源(本质是字符串)写入索引或者将其从索引中删除;所谓出是读出,即向用户提供全文搜索服务,让用户可以通过关键词定位源。

1.1写入流程
源字符串首先经过analyzer处理,包括:分词,分成一个个单词;去除stopword(可选)。
将源中需要的信息加入Document的各个Field中,并把需要索引的Field索引起来,把需要存储的Field存储起来。
将索引写入存储器,存储器可以是内存或磁盘。

1.2读出流程
用户提供搜索关键词,经过analyzer处理。
对处理后的关键词搜索索引找出对应的Document。
用户根据需要从找到的Document中提取需要的Field。

2 一些需要知道的概念
lucene用到一些概念,了解它们的含义,有利于下面的讲解。

2.1 analyzer
Analyzer 是分析器,它的作用是把一个字符串按某种规则划分成一个个词语,并去除其中的无效词语,这里说的无效词语是指英文中的“of”、 “the”,中文中的 “的”、“地”等词语,这些词语在文章中大量出现,但是本身不包含什么关键信息,去掉有利于缩小索引文件、提高效率、提高命中率。
分词的规则千变万化,但目的只有一个:按语义划分。这点在英文中比较容易实现,因为英文本身就是以单词为单位的,已经用空格分开;而中文则必须以某种方法将连成一片的句子划分成一个个词语。具体划分方法下面再详细介绍,这里只需了解分析器的概念即可。

2.2 document
用户提供的源是一条条记录,它们可以是文本文件、字符串或者数据库表的一条记录等等。一条记录经过索引之后,就是以一个Document的形式存储在索引文件中的。用户进行搜索,也是以Document列表的形式返回。

2.3 field
一个Document可以包含多个信息域,例如一篇文章可以包含“标题”、“正文”、“最后修改时间”等信息域,这些信息域就是通过Field在Document中存储的。
Field有两个属性可选:存储和索引。通过存储属性你可以控制是否对这个Field进行存储;通过索引属性你可以控制是否对该Field进行索引。这看起来似乎有些废话,事实上对这两个属性的正确组合很重要,下面举例说明:
还是以刚才的文章为例子,我们需要对标题和正文进行全文搜索,所以我们要把索引属性设置为真,同时我们希望能直接从搜索结果中提取文章标题,所以我们把标题域的存储属性设置为真,但是由于正文域太大了,我们为了缩小索引文件大小,将正文域的存储属性设置为假,当需要时再直接读取文件;我们只是希望能从搜索解果中提取最后修改时间,不需要对它进行搜索,所以我们把最后修改时间域的存储属性设置为真,索引属性设置为假。上面的三个域涵盖了两个属性的三种组合,还有一种全为假的没有用到,事实上Field不允许你那么设置,因为既不存储又不索引的域是没有意义的。

2.4 term
term是搜索的最小单位,它表示文档的一个词语,term由两部分组成:它表示的词语和这个词语所出现的field。

2.5 tocken
tocken是term的一次出现,它包含trem文本和相应的起止偏移,以及一个类型字符串。一句话中可以出现多次相同的词语,它们都用同一个term表示,但是用不同的tocken,每个tocken标记该词语出现的地方。

2.6 segment
添加索引时并不是每个document都马上添加到同一个索引文件,它们首先被写入到不同的小文件,然后再合并成一个大索引文件,这里每个小文件都是一个segment。

3 lucene的结构
lucene包括core和sandbox两部分,其中core是lucene稳定的核心部分,sandbox包含了一些附加功能,例如highlighter、各种分析器。
Lucene core有七个包:analysis,document,index,queryParser,search,store,util。
3.1 analysis
Analysis包含一些内建的分析器,例如按空白字符分词的WhitespaceAnalyzer,添加了stopwrod过滤的StopAnalyzer,最常用的StandardAnalyzer。
3.2 document
Document包含文档的数据结构,例如Document类定义了存储文档的数据结构,Field类定义了Document的一个域。
3.3 index
Index 包含了索引的读写类,例如对索引文件的segment进行写、合并、优化的IndexWriter类和对索引进行读取和删除操作的 IndexReader类,这里要注意的是不要被IndexReader这个名字误导,以为它是索引文件的读取类,实际上删除索引也是由它完成, IndexWriter只关心如何将索引写入一个个segment,并将它们合并优化;IndexReader则关注索引文件中各个文档的组织形式。
3.4 queryParser
QueryParser 包含了解析查询语句的类,lucene的查询语句和sql语句有点类似,有各种保留字,按照一定的语法可以组成各种查询。 Lucene有很多种 Query类,它们都继承自Query,执行各种特殊的查询,QueryParser的作用就是解析查询语句,按顺序调用各种 Query类查找出结果。
3.5 search
Search包含了从索引中搜索结果的各种类,例如刚才说的各种Query类,包括TermQuery、BooleanQuery等就在这个包里。
3.6 store
Store包含了索引的存储类,例如Directory定义了索引文件的存储结构,FSDirectory为存储在文件中的索引,RAMDirectory为存储在内存中的索引,MmapDirectory为使用内存映射的索引。
3.7 util
Util包含一些公共工具类,例如时间和字符串之间的转换工具。

4 如何建索引
4.1 最简单的能完成索引的代码片断

IndexWriter writer = new IndexWriter(“/data/index/”, new StandardAnalyzer(), true);
Document doc = new Document();
doc.add(new Field("title", "lucene introduction", Field.Store.YES, Field.Index.TOKENIZED));
doc.add(new Field("content", "lucene works well", Field.Store.YES, Field.Index.TOKENIZED));
writer.addDocument(doc);
writer.optimize();
writer.close();

下面我们分析一下这段代码。
首先我们创建了一个writer,并指定存放索引的目录为“/data/index”,使用的分析器为StandardAnalyzer,第三个参数说明如果已经有索引文件在索引目录下,我们将覆盖它们。
然后我们新建一个document。
我们向document添加一个field,名字是“title”,内容是“lucene introduction”,对它进行存储并索引。
再添加一个名字是“content”的field,内容是“lucene works well”,也是存储并索引。
然后我们将这个文档添加到索引中,如果有多个文档,可以重复上面的操作,创建document并添加。
添加完所有document,我们对索引进行优化,优化主要是将多个segment合并到一个,有利于提高索引速度。
随后将writer关闭,这点很重要。

对,创建索引就这么简单!
当然你可能修改上面的代码获得更具个性化的服务。

4.2 将索引直接写在内存
你需要首先创建一个RAMDirectory,并将其传给writer,代码如下:

Directory dir = new RAMDirectory();
IndexWriter writer = new IndexWriter(dir, new StandardAnalyzer(), true);
Document doc = new Document();
doc.add(new Field("title", "lucene introduction", Field.Store.YES, Field.Index.TOKENIZED));
doc.add(new Field("content", "lucene works well", Field.Store.YES, Field.Index.TOKENIZED));
writer.addDocument(doc);
writer.optimize();
writer.close();

4.3 索引文本文件
如果你想把纯文本文件索引起来,而不想自己将它们读入字符串创建field,你可以用下面的代码创建field:

Field field = new Field("content", new FileReader(file));

这里的file就是该文本文件。该构造函数实际上是读去文件内容,并对其进行索引,但不存储。

5 如何维护索引
索引的维护操作都是由IndexReader类提供。具体的介绍可以参考lucene的API

4.创建数据库

a.创建数据库,库名:testssh

数据库脚本如下(该项目是用的数据库是sqlserver2008R2):

 

USE [testssh]

GO

/****** Object:  Table [dbo].[tb_FullTextSearch]    Script Date: 12/23/2013 14:20:52 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

SET ANSI_PADDING ON

GO

CREATE TABLE [dbo].[tb_FullTextSearch](

         [fileId] [int] IDENTITY(1,1) NOT NULL,

         [fileBz] [varchar](255) NULL,

         [fileContent] [varchar](1800) NULL,

         [filesName] [varchar](255) NULL,

PRIMARY KEY CLUSTERED

(

         [fileId] ASC

)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]

) ON [PRIMARY]

GO

SET ANSI_PADDING OFF

GO

数据库脚本已上传到该demo文件

5.部署项目

a.把应用部署到tomcat

然后启动服务,在IE地址栏输入我们的应用地址,界面如下:

 

这是加入的测试数据,在页面按照关键字可以进行搜索,比如在搜索框输入中国电信,显示如下:

 

搜索结果会按照字进行匹配查询,并将搜索的关键字进行高亮显示。并且支持按照字,词语,一句话搜索。

 

再传sql脚本

USE [testssh]
GO
/****** Object:  Table [dbo].[tb_FullTextSearch]    Script Date: 12/23/2013 14:20:52 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[tb_FullTextSearch](
    [fileId] [int] IDENTITY(1,1) NOT NULL,
    [fileBz] [varchar](255) NULL,
    [fileContent] [varchar](1800) NULL,
    [filesName] [varchar](255) NULL,
PRIMARY KEY CLUSTERED 
(
    [fileId] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
SET IDENTITY_INSERT [dbo].[tb_FullTextSearch] ON
INSERT [dbo].[tb_FullTextSearch] ([fileId], [fileBz], [fileContent], [filesName]) VALUES (1, N'我是备注', N'中国电信集团公司(简称“中国电信”)成立于2002年,是我国特大型国有通信企业。中国电信作为中国主体电信企业和最大的基础网络运营商,拥有世界第一大固定电话网络,小马哥', N'文件001')
INSERT [dbo].[tb_FullTextSearch] ([fileId], [fileBz], [fileContent], [filesName]) VALUES (3, N'54如何分工会分工合作', N'统一绿茶自1998年在大陆上市,至2003年已成绿茶品类的领先品牌。统一绿茶[2]含丰富茶多酚、氨基酸和维生素,可消除身体中多余的氧自由基,延缓细胞老化,促进新陈代谢,增强免疫力,是天然,的健康茶饮料统一绿茶以“亲近自
然”品牌主张塑造清新自然,
框架漏洞', N'文件003')
INSERT [dbo].[tb_FullTextSearch] ([fileId], [fileBz], [fileContent], [filesName]) VALUES (4, N'在啥地方', N'推出“梦想之旅——茶游天下”主题活动,将品牌“亲近自然”的主旋律在网络上推广和传播,广受年轻消费者喜爱;并在此基础上,启动统一绿茶“绿种子”三江源保护行动,这是统一企业与青海省政府共同筹措三江源主题保护基金并为宣传三江源特别设立横跨全国19个省', N'文件004')
INSERT [dbo].[tb_FullTextSearch] ([fileId], [fileBz], [fileContent], [filesName]) VALUES (5, N'相关备注', N'即网络爬虫,是一种自动获取网页内容的程序,是搜索引擎的重要组成部分,因此搜索引擎优化很大程度上就是针对爬虫而做出的优化。
主要分类
网络爬虫为搜索引擎从万维网下载网页。一般分为传统爬虫和聚焦爬虫。
传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。通俗的讲,也就是通过源码解析来获得想要的内容。
', N'文件005')
INSERT [dbo].[tb_FullTextSearch] ([fileId], [fileBz], [fileContent], [filesName]) VALUES (6, N'汽车', N'奥迪是著名的汽车开发商和制造商,其标志为四个圆环。现为大众汽车公司的子公司,总部设在德国的英戈尔施塔特,主要产品有A1、A2、A3、A4、A5、A6、A7、A8、Q3、Q5、Q7、R8以及RS性能系列等等。有同名人物,内蒙古师范大学美术系副教授。小心漏洞', N'我是文件名')
INSERT [dbo].[tb_FullTextSearch] ([fileId], [fileBz], [fileContent], [filesName]) VALUES (7, N'更好水电费', N'奥林匹克运动会(简称奥运会)(Olympic Games ào lín pǐ kè yùn dòng huì) 是国际奥林匹克委员会主办的包含多种体育运动项目的国际性运动会,每四年举行一次。奥林匹克运动会最早起源于古希腊,因举办地在奥林匹亚而得名。奥林匹克运动会现在已经成为了和平与友谊的象征,它是一种融体育、教育、文化为一体的综合性、持续性、世界性的活动,也是一种文化的传播体现,这样的传播在奥运会中能得到充分的展示', N'发给公司的')
INSERT [dbo].[tb_FullTextSearch] ([fileId], [fileBz], [fileContent], [filesName]) VALUES (8, N'记录表', N'? 1896年雅典奥运会 ( 第1届)  ? 1900年巴黎奥运会 ( 第2届)  ? 1904年圣路易斯奥运会 ( 第3届)  
? 1908年伦敦奥运会 ( 第4届)  ? 1912年斯德哥尔摩奥运会 ( 第5届)  ? 1920年安特卫普奥运会 ( 第7届)  
? 1924年巴黎奥运会 ( 第8届)  ? 1928年阿姆斯特丹奥运会 ( 第9届)  ? 1932年洛杉矶奥运会 ( 第10届)  
? 1936年柏林奥运会 ( 第11届)  ? 1948年伦敦奥运会 ( 第14届)  ? 1952年赫尔辛基奥运会 ( 第15届)  
? 1956年墨尔本奥运会 ( 第16届)  ? 1960年罗马奥运会 ( 第17届)  
', N'历史记录')
INSERT [dbo].[tb_FullTextSearch] ([fileId], [fileBz], [fileContent], [filesName]) VALUES (9, N'34额地f斯蒂芬斯dsasdf ', N'《美国独立宣言》(United States Declaration of Independence),为北美洲十三个英属殖民地宣告自大不列颠王国独立,并宣明此举正当性之文告。1776年7月4日,本宣言由第二次大陆会议(Second Continental Congress)于费城批准,这一天后成为美国独立纪念日。宣言之原件由大陆会议出席代表共同签署,并永久展示于美国华盛顿特区之国家档案与文件署。此宣言为美国最重要的立国文书之一。《独立宣言》由四部分组成', N'as水电费水电费')
INSERT [dbo].[tb_FullTextSearch] ([fileId], [fileBz], [fileContent], [filesName]) VALUES (10, N'沙发沙发', N'贝拉克·侯赛因·奥巴马二世(英语:Barack Hussein Obama II,1961.08.04-),美国民主党政治家。第56届、第57届美国总统(连任)。为美国历史上第一位非裔总统,首位同时拥有黑(卢欧族)白(英德爱混血)血统的总统。2007年2月10日,他以侧重完结伊拉克战争及实施全民医疗保险制为竞选纲领,正式宣布参加2008年美国总统选举,并于同年11月4日正式当选', N'撒地方撒地方')
INSERT [dbo].[tb_FullTextSearch] ([fileId], [fileBz], [fileContent], [filesName]) VALUES (13, N'我是备注信息', N'搜索的是问文件的内容,将文件内容存储到数据库中', N'全文搜索demo')
INSERT [dbo].[tb_FullTextSearch] ([fileId], [fileBz], [fileContent], [filesName]) VALUES (14, N'哈哈哈哈', N'数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今五十年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管理的方式。数据库有很多种类型,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统都在各个方面得到了广泛的应用', N'数据库001')
SET IDENTITY_INSERT [dbo].[tb_FullTextSearch] OFF

 

posted @ 2014-02-24 12:21  33hehe  阅读(156)  评论(0)    收藏  举报