一、全文搜索引擎有那些?
全文搜索引擎有:
1. Lucene
Lucene的开发语言是Java,也是Java家族中最为出名的一个开源搜索引擎,在Java世界中已经是标准的全文检索程序,它提供了完整的查询引擎和索引引擎,没有中文分词引擎,需要自己去实现,因此用Lucene去做一个搜素引擎需要自己去架构.另外它不支持实时搜索,但linkedin和twitter有分别对Lucene改进的实时搜素. 其中Lucene有一个C++移植版本叫CLucene,CLucene因为使用C++编写,所以理论上要比lucene快.
官方主页:http://lucene.apache.org/
CLucene官方主页:http://sourceforge.net/projects/clucene/
2. Sphinx
Sphinx是一个用C++语言写的开源搜索引擎,也是现在比较主流的搜索引擎之一,在建立索引的事件方面比Lucene快50%,但是索引文件比Lucene要大一倍,因此Sphinx在索引的建立方面是空间换取事件的策略,在检索速度上,和lucene相差不大,但检索精准度方面Lucene要优于Sphinx,另外在加入中文分词引擎难度方面,Lucene要优于Sphinx.其中Sphinx支持实时搜索,使用起来比较简单方便.
官方主页:http://sphinxsearch.com/about/sphinx/
3. Xapian
Xapian是一个用C++编写的全文检索程序,它的api和检索原理和lucene在很多方面都很相似,算是填补了lucene在C++中的一个空缺.
官方主页:http://xapian.org/
4. Nutch
Nutch是一个用java实现的开源的web搜索引擎,包括爬虫crawler,索引引擎,查询引擎. 其中Nutch是基于Lucene的,Lucene为Nutch提供了文本索引和搜索的API.
对于应该使用Lucene还是使用Nutch,应该是如果你不需要抓取数据的话,应该使用Lucene,最常见的应用是:你有数据源,需要为这些数据提供一个搜索页面,在这种情况下,最好的方式是直接从数据库中取出数据,并用Lucene API建立索引.
官方主页:http://nutch.apache.org/
5. DataparkSearch
DataparkSearch是一个用C语言实现的开源的搜索引擎. 其中网页排序是采用神经网络模型. 其中支持HTTP,HTTPS,FTP,NNTP等下载网页.包括索引引擎,检索引擎和中文分词引擎(这个也是唯一的一个开源的搜索引擎里有中文分词引擎).能个性化定制搜索结果,拥有完整的日志记录.
官方主页:http://www.dataparksearch.org/
6. Zettair
Zettair是根据Justin Zobel的研究成果为基础的全文检索实验系统.它是用C语言实现的. 其中Justin Zobel在全文检索领域很有名气,是业界第一个系统提出倒排序索引差分压缩算法的人,倒排列表的压缩大大提高了检索和加载的性能,同时空间膨胀率也缩小到相当优秀的水平. 由于Zettair是源于学术界,代码是由RMIT University的搜索引擎组织写的,因此它的代码简洁精炼,算法高效,是学习倒排索引经典算法的非常好的实例. 其中支持linux,windows,mac os等系统.
官方主页:http://www.seg.rmit.edu.au/zettair/about.html
7. Indri
Indri是一个用C语言和C++语言写的全文检索引擎系统,是由University of Massachusetts和Carnegie Mellon University合作推出的一个开源项目. 特点是跨平台,API接口支持Java,PHP,C++.
官方主页:http://www.lemurproject.org/indri/
8. Terrier
Terrier是由School of Computing Science,Universityof Glasgow用java开发的一个全文检索系统.
官方主页:http://terrier.org/
9. Galago
Galago是一个用java语言写的关于文本搜索的工具集. 其中包括索引引擎和查询引擎,还包括一个叫TupleFlow的分布式计算框架(和google的MapReduce很像).这个检索系统支持很多Indri查询语言.
官方主页:http://www.galagosearch.org/
10. Zebra
Zebra是一个用C语言实现的检索程序,特点是对大数据的支持,支持EMAIL,XML,MARC等格式的数据.
官方主页:https://www.indexdata.com/zebra
11. Solr
Solr是一个用java开发的独立的企业级搜索应用服务器,它提供了类似于Web-service的API接口,它是基于Lucene的全文检索服务器,也算是Lucene的一个变种,很多一线互联网公司都在使用Solr,也算是一种成熟的解决方案.
官方主页:http://lucene.apache.org/solr/
12. Elasticsearch
Elasticsearch是一个采用java语言开发的,基于Lucene构造的开源,分布式的搜索引擎. 设计用于云计算中,能够达到实时搜索,稳定可靠. Elasticsearch的数据模型是JSON.
官方主页:http://www.elasticsearch.org/
13. Whoosh
Whoosh是一个用纯python写的开源搜索引擎.
官方主页:https://bitbucket.org/mchaput/whoosh/wiki/Home
二、Mysql搜索引擎有那些?
全文检索在MySQL里面很早就支持了,只不过一直以来只支持英文。缘由是他从来都使用空格来作为分词的分隔符,而对于中文来讲,显然用空格就不合适,需要针对中文语义进行分词。
这不,从MySQL5.7开始,MySQL内置了ngram全文检索插件,用来支持中文分词,并且对MyISAM和InnoDB引擎有效。
在使用中文检索分词插件ngram之前,先得在MySQL配置文件里面设置他的分词大小,比如,[mysqld]ngram_token_size=2这里把分词大小设置为2。要记住,分词的SIZE越大,索引的体积就越大,所以要根据自身情况来设置合适的大小。示例表结构:
CREATE TABLE articles (id INTUNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,titleVARCHAR(200),body TEXT,FULLTEXT (title,body) WITH PARSER ngram) ENGINE=InnoDBCHARACTER SET utf8mb4;示例数据,有6行记录。mysql> select * from articles\G**************************
*1. row ***************************id: 1title: 数据库管理body: 在本教程中我将向你展示如何管理数据库***************************2. row ***************************id: 2title: 数据库应用开发body: 学习开发数据库应用程序***************************3. row ***************************id: 3title: MySQL完全手册body: 学习MySQL的一切***************************4. row ***************************id: 4title: 数据库与事务处理body: 系统的学习数据库的事务概论***************************5. row ***************************id: 5title: NoSQL精髓body: 学习了解各种非结构化数据库***************************6. row ***************************id: 6title: SQL 语言详解body: 详细了解如果使用各种SQL6 rows inset (0.00 sec)显式指定全文检索表源mysql> SETGLOBAL innodb_ft_aux_table="new_feature/articles";Query OK, 0 rows affected (0.00 sec)通过系统表,就可以查看到底是怎么划分articles里的数据。
mysql> SELECT *FROM information_schema.INNODB_FT_INDEX_CACHE LIMIT 20,10;+------+--------------+-------------+-----------+--------+----------+| WORD | FIRST_DOC_ID | LAST_DOC_ID | DOC_COUNT | DOC_ID| POSITION |+------+--------------+-------------+-----------+--------+----------+| 中我 | 2 | 2 | 1 | 2 | 28 || 习m | 4 | 4 | 1 | 4 | 21 || 习了 | 6 | 6 | 1 | 6 | 16 || 习开 | 3 | 3 | 1 | 3 | 25 || 习数 | 5 | 5 | 1 | 5 | 37 || 了解 | 6 | 7 | 2 | 6 | 19 || 了解 | 6 | 7 | 2 | 7 | 23 || 事务 | 5 | 5 | 1 | 5 | 12 || 事务 | 5 | 5 | 1 | 5 | 40 || 何管 | 2 | 2 | 1 | 2 | 52 |+------+--------------+-------------+-----------+--------+----------+10 rows in set (0.00 sec)这里可以看到,把分词长度设置为2,所有的数据都只有两个一组。上面数据还包含了行的位置,ID等等信息。
接下来,我来进行一系列检索示范,使用方法和原来英文检索一致。1. 自然语言模式下检索:A,得到符合条件的个数,mysql>SELECT COUNT(*) FROM articles-> WHERE MATCH (title,body) AGAINST ('数据库' IN NATURALLANGUAGE MODE);+----------+| COUNT(*) |+----------+| 4 |+----------+1 row in set (0.05 sec)B,得到匹配的比率,mysql>SELECT id, MATCH (title,body) AGAINST ('数据库' IN NATURAL LANGUAGE MODE)AS score FROM articles;+----+----------------------+| id| score |+----+----------------------+| 1 | 0.12403252720832825 || 2 | 0.12403252720832825 || 3 | 0 || 4 | 0.12403252720832825 || 5 | 0.062016263604164124 || 6 | 0 |+----+----------------------+6rows in set (0.00 sec)2. 布尔模式下搜索,这个就相对于自然模式搜索来的复杂些:A,匹配既有管理又有数据库的记录,mysql> SELECT * FROM articles WHERE MATCH (title,body)-> AGAINST ('+数据库 +管理' IN BOOLEAN MODE);+----+------------+--------------------------------------+| id| title | body |+----+------------+--------------------------------------+| 1 | 数据库管理 | 在本教程中我将向你展示如何管理数据库|+----+------------+--------------------------------------+1 rowin set (0.00 sec)B,匹配有数据库,但是没有管理的记录,mysql> SELECT * FROM articles WHERE MATCH (title,body)-> AGAINST ('+数据库 -管理' IN BOOLEAN MODE);+----+------------------+----------------------------+| id| title | body |+----+------------------+----------------------------+| 2 | 数据库应用开发 | 学习开发数据库应用程序 || 4 | 数据库与事务处理 | 系统的学习数据库的事务概论 || 5 | NoSQL 精髓 | 学习了解各种非结构化数据库 |+----+------------------+----------------------------+3rows in set (0.00 sec)C,匹配MySQL,但是把数据库的相关性降低,mysql> SELECT * FROM articles WHERE MATCH (title,body)-> AGAINST ('>数据库 +MySQL' INBOOLEAN MODE);+----+---------------+-----------------+| id| title | body |+----+---------------+-----------------+| 3 | MySQL完全手册 |学习MySQL的一切 |+----+---------------+-----------------+1 rowin set (0.00 sec)3,查询扩展模式,比如要搜索数据库,那么MySQL,oracle,DB2也都将会被搜索到,mysql> SELECT * FROM articles-> WHERE MATCH (title,body)-> AGAINST ('数据库' WITH QUERY EXPANSION);+----+------------------+--------------------------------------+| id| title | body |+----+------------------+--------------------------------------+| 1 | 数据库管理 | 在本教程中我将向你展示如何管理数据库| 4 | 数据库与事务处理 | 系统的学习数据库的事务概论| 2 | 数据库应用开发 | 学习开发数据库应用程序 || 5 | NoSQL 精髓 | 学习了解各种非结构化数据库 || 6 | SQL 语言详解 | 详细了解如果使用各种SQL|| 3 | MySQL完全手册 | 学习MySQL的一切 |+----+------------------+--------------------------------------+6rows in set (0.01 sec)当然,我这里只是功能演示,更多的性能测试,大家有兴趣可以进行详细测试。由于N-grm是中文检索常用的分词算法,已经在互联网大量使用,这次集成到mysql中,想必效果上不会有太大的问题。
三、哪些属于目录搜索引擎?
常见的目录搜索引擎包括 Yahoo!目录,DMOZ,LookSmart 和 About.com。它们通常提供预编辑的网站分类,用户可以浏览或搜索,以找到满足他们需求的网站。
四、机器人搜索引擎是什么?
搜索引擎机器人又叫爬虫,是一个形象化的一个系统。他是搜索引擎抓取网站内容,并将内容储存到搜索引擎数据库的一种工具。
五、搜索引擎属于知识问答吗?
搜索引擎不属于知识问答。因为搜索引擎主要原理是利用关键字在资料库里找到你需要的东西,这只是匹配的原理,不是知识问答,一般知识问答是有人提出问题,别人过来回答,所以说是人工回复,而搜索引擎只要资料库足够丰富,就能找到答案
六、全文搜索引擎和目录搜索引擎和元素搜索引擎的区别?
全文搜索引擎、目录搜索引擎与元搜索引擎的区别为:数据来源不同、操作不同、得到网站不同。
一、数据来源不同
1、全文搜索引擎:全文搜索引擎的数据来源为自动抓取的网页生成索引。
2、目录搜索引擎:目录搜索引擎的数据来源为人工收录分类的数据库。
3、元搜索引擎:元搜索引擎的数据来源为其他搜索引擎获取结果。
二、操作不同
1、全文搜索引擎:全文搜索引擎通过从互联网上提取的各个网站的信息而建立的数据库中,检索与用户查询条件匹配的相关记录,然后按一定的排列顺序将结果返回给用户。
2、目录搜索引擎:目录搜索引擎通过现有收录的网站信息按目录分类的网站链接列表匹配,将匹配结果返回给用户。
3、元搜索引擎:元搜索引擎在接受用户查询请求时,同时在其他多个引擎上进行搜索,并将结果返回给用户。
三、得到网站不同
1、全文搜索引擎:全文搜索引擎得到的网站信息更及时。
2、目录搜索引擎:目录搜索引擎得到的网站质量更高。
3、元搜索引擎:元搜索引擎得到的网站信息数量更多。
七、搜索引擎营销属于什么营销方法
搜索引擎即sem,是一种常见的互联网营销方法,通过提高搜索量来进行排名,比较靠前,从而吸引更多的用户的点击
八、Yahoo搜索属于哪类搜索引擎()?
雅虎(Yahoo!,NASDAQ:YHOO)是美国著名的互联网门户网站,20世纪末互联网奇迹的创造者之一。其服务包括搜索引擎、电邮、新闻等,业务遍及24个国家和地区,为全球超过5亿的独立用户提供多元化的网络服务。同时也是是一家全球性的因特网通讯、商贸及媒体公司。
九、什么是搜索引擎搜索引擎怎样分类?
搜索引擎(Search Engine)是指根据一定的策略、运用特定的计算机程序从互联网上搜集信息,在对信息进行组织和处理后,为用户提供检索服务,将用户检索相关的信息展示给用户的系统。
搜索引擎包括全文索引、目录索引、元搜索引擎、垂直搜索引擎、集合式搜索引擎、门户搜索引擎与免费链接列表等。
十、搜索引擎与引擎的区别?
区别一:搜索主体不同
首先是搜索面向的主体不同,一个基于“文本信息”的搜索,一个则是基于“商品”的搜索
区别二:时效性不同
以文本为主的搜索结果,不同时段下的结果更新较慢且相对固定,因为用户在搜索某一问题时所想要的答案也是相对固定的。
以商品为主的搜索结果,要考虑当前季节、特定时期的流行度、搜索用户的消费水平及购买习惯等因素,这些因素都会随着时间的推移,而发生或多或少的变化,所以搜索结果更新是比较频繁的。
区别三:检索维度不同
搜索引擎在检索时,主要考虑关键词与文本标题的匹配,当前页面的关键词密度,以及当前文本页面的外链数量等因素来计算排名权重。