全文检索工具都有哪些?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了全文检索工具都有哪些?相关的知识,希望对你有一定的参考价值。

全文检索工具有哪些?想了解全文检索工具

1. Lucene

Lucene的开发语言是Java,也是Java家族中最为出名的一个开源搜索引擎,在Java世界中已经是标准的全文检索程序,它提供了完整的查询引擎和索引引擎,没有中文分词引擎,需要自己去实现,因此用Lucene去做一个搜素引擎需要自己去架构.另外它不支持实时搜索,但linkedin和twitter有分别对Lucene改进的实时搜素. 其中Lucene有一个C++移植版本叫CLucene,CLucene因为使用C++编写,所以理论上要比lucene快.
2. Sphinx

Sphinx是一个用C++语言写的开源搜索引擎,也是现在比较主流的搜索引擎之一,在建立索引的事件方面比Lucene快50%,但是索引文件比Lucene要大一倍,因此Sphinx在索引的建立方面是空间换取事件的策略,在检索速度上,和lucene相差不大,但检索精准度方面Lucene要优于Sphinx,另外在加入中文分词引擎难度方面,Lucene要优于Sphinx.其中Sphinx支持实时搜索,使用起来比较简单方便.
3. Xapian

Xapian是一个用C++编写的全文检索程序,它的api和检索原理和lucene在很多方面都很相似,算是填补了lucene在C++中的一个空缺.
4. Nutch

Nutch是一个用java实现的开源的web搜索引擎,包括爬虫crawler,索引引擎,查询引擎. 其中Nutch是基于Lucene的,Lucene为Nutch提供了文本索引和搜索的API.

对于应该使用Lucene还是使用Nutch,应该是如果你不需要抓取数据的话,应该使用Lucene,最常见的应用是:你有数据源,需要为这些数据提供一个搜索页面,在这种情况下,最好的方式是直接从数据库中取出数据,并用Lucene API建立索引.
5. DataparkSearch

DataparkSearch是一个用C语言实现的开源的搜索引擎. 其中网页排序是采用神经网络模型. 其中支持HTTP,HTTPS,FTP,NNTP等下载网页.包括索引引擎,检索引擎和中文分词引擎(这个也是唯一的一个开源的搜索引擎里有中文分词引擎).能个性化定制搜索结果,拥有完整的日志记录.
6. Zettair

Zettair是根据Justin Zobel的研究成果为基础的全文检索实验系统.它是用C语言实现的. 其中Justin Zobel在全文检索领域很有名气,是业界第一个系统提出倒排序索引差分压缩算法的人,倒排列表的压缩大大提高了检索和加载的性能,同时空间膨胀率也缩小到相当优秀的水平. 由于Zettair是源于学术界,代码是由RMIT University的搜索引擎组织写的,因此它的代码简洁精炼,算法高效,是学习倒排索引经典算法的非常好的实例. 其中支持linux,windows,mac os等系统.
7. Indri

Indri是一个用C语言和C++语言写的全文检索引擎系统,是由University of Massachusetts和Carnegie Mellon University合作推出的一个开源项目. 特点是跨平台,API接口支持Java,PHP,C++.
来自网络。
参考技术A select * from test where key like "%双十一剁手榜%"
and province "%南%";

article
title,author,digest,content,url

全文索引的工具===》like模糊查询
ElasticSearch===>基于Lucene-->作者:Doug Couting
Lucene
Solr---solr4.0之后分布式--Solr cloud
ElasticSearch--->分布式、集群的、大数据

中国




ElasticSearch
index--新闻
type--财经
doucment
doucment
作者 标题 摘要 ...
type--体育
doucment
doucment
http://www.uplooking.com/course/bigdata?name=hadoop&date=2016-10-24

rest
curl -XGET http://www.uplooking.com/course/bigdata -d '"name":"hadoop","date":"2016-10-24"'

http://www.uplooking.com/index/type/1
http://www.uplooking.com/index/type/2
EasticSearch配置
需要注意一点:在2.x后面的版本只能安装在linux的普通用户下面
解压:
~]$ unzip soft/elasticsearch-2.3.0.zip
重命名
配置:
在elasticsearch.yml文件中配置,修改一下内容
network.host: master
cluster-name: bigdata
node.name: hadoop
ES的CURL方式操作
创建索引库
curl -XPUT master:9200/bigdata
创建索引
curl -XPOST master:9200/bigdata/product/1 -d '"name":"hadoop", "author":"Doug Couting", "lastest_version":"3.0.0"'
查询索引信息
curl -XGET master:9200/bigdata ==>获取当前索引库的配置信息
curl -XGET master:9200/bigdata/_search ==>查询索引库下面的所有索引信息
curl -XGET master:9200/bigdata/_search?pretty==>对查询结果格式化
curl -XGET master:9200/bigdata/type/1?pretty==>精确查询索引id为1的一条信息
curl -XPOST master:9200/bigdata/product/2 -d '"name":"hive", "author":"facebook", "lastest_version":"2.1.0"'
curl -XPOST master:9200/bigdata/product/3 -d '"name":"hbase", "author":"apache", "lastest_version":"1.1.5"'
更新
推荐是POST===>对具体的一条索引记录进行更新 ==》没有就给我新增,有的话,更新覆盖原有内容
curl -XPOST master:9200/bigdata/product/3 -d '"name":"hive", "author":"facebook", "lastest_version":"1.2.1"'
删除
curl -XPOST master:9200/bigdata/product/4 -d '"name":"storm", "author":"apache", "lastest_version":"1.0.2"'
curl -XDELETE master:9200/bigdata/product/4--->根据指定的索引id进行删除
高级查询
查询某一个索引下面的source的内容
curl -XGET master:9200/bigdata/product/1/_source?pretty

"name" : "hadoop",
"author" : "Doug Couting",
"lastest_version" : "3.0.0"

查询name是hadoop,hbase条件查询
curl -XGET 'master:9200/bigdata/product/_search?q=name:hadoop,hbase&pretty'

"took" : 20,
"timed_out" : false,
"_shards" :
"total" : 5,
"successful" : 5,
"failed" : 0
,
"hits" :
"total" : 2,
"max_score" : 0.04500804,
"hits" : [
"_index" : "bigdata",
"_type" : "product",
"_id" : "1",
"_score" : 0.04500804,
"_source" :
"name" : "hadoop",
"author" : "Doug Couting",
"lastest_version" : "3.0.0"

,
"_index" : "bigdata",
"_type" : "product",
"_id" : "3",
"_score" : 0.04500804,
"_source" :
"name" : "hbase",
"author" : "apache",
"lastest_version" : "1.1.5"

]


部分字段查询
curl -XGET 'master:9200/bigdata/product/3?_source=name,author&pretty'

"_index" : "bigdata",
"_type" : "product",
"_id" : "3",
"_version" : 1,
"found" : true,
"_source" :
"author" : "apache",
"name" : "hbase"


curl 'http://master:9200/_cat/indices?v'--->查看多个索引库列表
批量操作--bulk
参考技术B 一、Lucene
Lucene是一个全文检索的工具包,是一堆jar包,不能单独运行,不能独立对外提供服务。
优点:部署简单,它只是应用程序的一个依赖包,不需要独立部署
缺点:
1、应用只能单服务器部署,集群部署有问题,全文索引需要在多台应用服务器间同步,是有状态的请求。
2、编写的代码量会比较大,而且要考虑性能问题。
二、MySQL 5.7.6以上
从MySQL 5.7.6开始,MySQL内置了ngram全文检索插件,用来支持中文分词,并且对MyISAM和InnoDB引擎有效。
优点:开发简单;不需要额外引入Elasticsearch这样的搜索引擎服务器。
缺点:
1、中文分词不准确
2、性能不高
3、数据量不大
三、MySQL+IK分词器
在MySQL5.6以下,只有MyISAM引擎支持全文检索。在MySQL5.6以上Innodb引擎也提供支持全文检索。相应字段需要建立FULLTEXT索引。
MySQL5.7.6以下只支持英文全文索引,不支持中文全文索引,需要利用IK分词器把中文段落拆分成单词。
优点:比方案2中文分词更准确;不需要额外引入Elasticsearch这样的搜索引擎服务器。
缺点:
1、性能不高
2、数据量不大
四、Elasticsearch搜索引擎
互联网公司基本都在使用,性能高,支持的数据量大。
缺点:
1、需要一定的学习成本
2、需要独立部署,需要集群部署本回答被提问者采纳

Perl 都有哪些代码覆盖工具?

【中文标题】Perl 都有哪些代码覆盖工具?【英文标题】:What are some code coverage tools for Perl?Perl 有哪些代码覆盖工具? 【发布时间】:2010-09-18 19:22:19 【问题描述】:

是否有任何适用于 Perl 的好的(最好是免费的)代码覆盖工具?

【问题讨论】:

【参考方案1】:

像往常一样,CPAN 是你的朋友:看看Devel::Cover

【讨论】:

请不要链接到特定版本的模块。请改用search.cpan.org/perldoc?Devel::Cover。 我仍然认为 perldoc 链接在这种情况下更好,因为它向您显示了文档。但是讨论这些链接方法优点的地方是***.com/questions/43758/… 在这种特殊情况下,我认为链接到发行版更合适,因为其中包含大量模块,以及教程。【参考方案2】:

是的,Devel::Cover 是要走的路。

如果您开发一个模块,并使用Module::Build 来管理安装,您甚至还有一个testcover 目标:

 perl Build.PL
 ./Build testcover

它运行整个测试套件,并以漂亮的 HTML 格式生成综合覆盖率报告,您可以在其中浏览模块并查看它们的覆盖率。

【讨论】:

谢谢,我只是有点疑惑,同一个问题一天回复了3个,两个几乎一模一样【参考方案3】:

如前所述,Devel::Cover 是您的朋友,但您也需要在 Google 上搜索它。它的文档有点稀疏,如果你彻底改变你的环境,你需要重新安装它,因为它构建了 Devel::Cover::Inc,在你安装它时会从你的环境中提取大量信息。这给我们在工作中带来了很多问题,因为我们有一个共享的 CPAN 环境,如果一个开发人员安装了 Devel::Cover 并且另一个开发人员尝试运行它,奇怪(和不正确)的结果很常见。

如果您使用此模块,还请查看Devel::CoverX::Covered。该模块将捕获 Devel::Cover 丢弃的大部分信息。非常方便。

【讨论】:

【参考方案4】:

Moritz 讨论了使用 Module::Build 构建的模块如何轻松使用 Devel::Cover。

对于使用 ExtUtils::MakeMaker 的模块,存在一个扩展模块来调用相同的功能。在调用 WriteMakefile() 之前添加以下代码:

eval "use ExtUtils::MakeMaker::Coverage";
if( !$@ ) 
    print "Adding testcover target\n";

... 将允许运行命令“make testcover”并让 Devel::Cover 发挥它的魔力。

【讨论】:

以上是关于全文检索工具都有哪些?的主要内容,如果未能解决你的问题,请参考以下文章

常用的文献管理工具都有哪些

求《管理工具理论》全文免费下载百度网盘资源,谢谢~

mysql索引都有哪些

HSQLDB for java 桌面应用都有哪些限制?

学习python用啥书

MySQL都有哪些索引类型