搜索引擎
laigood
自学能力强
展开
-
elasticsearch1.7.3升级到2.1.1记录
升级手册直接参考官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/restart-upgrade.html升级前可以看下有啥改动:https://www.elastic.co/guide/en/elasticsearch/reference/master/breaking-changes-2.0.html原创 2016-02-04 11:32:46 · 4726 阅读 · 1 评论 -
分布式搜索方案选型之五(终篇):Elasticsearch
最后发现了elasticsearch这个分布式搜索框架,我一看它的介绍就觉得,就是它了。它基本上所有我想要的特性都包含了,分布式搜索,分布式索引,零配置,自动分片,索引自动负载,自动发现,restful风格接口。于是就开始使用,部署了四台机器,并把索引导了进去,我设置的分片为3,即把索引分成三片,副本为2,即有两份完整的索引。 通过它的管理工具可以很清晰的看到它索引分布的情况:哪块分原创 2012-03-14 13:45:28 · 19121 阅读 · 6 评论 -
分布式爬虫nutch2.0初体验------三大亮点
实在是等不及了,下了开发版的nutch2.0来玩玩,nutch2.0有什么不同呢?从官网wiki(见参考资料)可看到,主要是以下几个方面:1.抽象存储层 把存储层抽象出来,不仅像之前那样可以存放在hdfs上,也可以存在其它nosql中,如:hbase,cassandra,或关系数据库。2.精简插件 之前是差不多是一种文件使用一个插件来进行解析,现在主要是使用原创 2012-06-02 19:10:22 · 7791 阅读 · 4 评论 -
eclipse中调试nutch2.0+cassandra
很早官方就开始了nutch2.0的研发,而一直都是两线同时研发的,一个是普通版,一个是gora版本,也就是nutch2.0。下面介绍下怎样把项目导进eclipse中,这里我们的存储层使用nosql cassandra,本来想先使用mysql试试,发现启动不了爬虫,调试下发现原来还没有完全实现gora的sql数据库的存储功能,所以选择易用的cassandra作为测试。需要知识:nutch基本知识原创 2012-06-03 08:36:12 · 6615 阅读 · 31 评论 -
分布式搜索elasticsearch高级配置之(二)------线程池设置
一个Elasticsearch节点会有多个线程池,但重要的是下面四个:索引(index):主要是索引数据和删除数据操作(默认是cached类型)搜索(search):主要是获取,统计和搜索操作(默认是cached类型)批量操作(bulk):主要是对索引的批量操作(默认是cached类型)更新(refresh):主要是更新操作(默认是cached类型)可以通过给设置一个参数来原创 2012-09-04 20:14:01 · 11603 阅读 · 2 评论 -
分布式搜索Elasticsearch源码分析之二------索引过程源码概要分析
elasticsearch的索引逻辑简单分析,这里只是理清主要的脉络,一些细节方面以后的文章或会阐述。假如通过java api来调用es的索引接口,先是构造成一个json串(es里表示为XContent,是对要处理的内容进行抽象),在IndexRequest里面指定要索引文档到那个索引库(index)、其类型(type)还有文档的id,如果没有指定文档的id,es会通过UUID工具自动原创 2012-12-29 13:56:17 · 13708 阅读 · 14 评论 -
分布式搜索elasticsearch几个概念解析
介绍下es的几个概念:cluster 代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。es的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部来看es集群,在逻辑上是个整体,你与任何一个节点的通信和与整个es集群通信是等价的。shards 代表索引分片,es可以原创 2012-04-02 02:16:59 · 22807 阅读 · 21 评论 -
一些国外优秀的elasticsearch使用案例
Github“Github使用Elasticsearch搜索20TB的数据,包括13亿的文件和1300亿行的代码”这个不用介绍了吧,码农们都懂的,Github在2013年1月升级了他们的代码搜索,由solr转为elasticsearch,目前集群规模为26个索引存储节点和8个客户端节点(负责处理搜索请求),详情请看官方博客https://github.com/blog/1381原创 2013-03-28 19:26:25 · 16934 阅读 · 25 评论 -
Elasticsearch Java虚拟机配置详解(转)
引言:今天,事情终于发生了。Java6(Mustang),是2006年早些时候出来的,至今仍然应用在众多生产环境中,现在终于走到了尽头。已经没有什么理由阻止迁移到Java7(Dolphin)上了。这也促使我想写一篇关于在ElasticSearch上配置Java6和7的细微差异的博文。Elasticsearch对Java虚拟机进行了预先的配置。通常情况下,因为这些配置的选择还转载 2013-01-03 20:52:09 · 6750 阅读 · 0 评论 -
分布式搜索elasticsearch java API 之(八)------使用More like this实现基于内容的推荐
基于内容的推荐通常是给定一篇文档信息,然后给用户推荐与该文档相识的文档。Lucene的api中有实现查询文章相似度的接口,叫MoreLikeThis。Elasticsearch封装了该接口,通过Elasticsearch的More like this查询接口,我们可以非常方便的实现基于内容的推荐。先看一个查询请求的json例子:{ "more_like_this" : {原创 2012-08-28 20:37:06 · 14738 阅读 · 7 评论 -
分布式搜索elasticsearch高级配置之(一)------分片分布规则设置
分片分布是把索引分片分布到节点的过程。这个操作会在初次启动集群,副本分配,负载均衡,或增加删除节点时进行。下面是一些与分片分布相关的设置:cluster.routing.allocation.allow_rebalance设置根据集群中机器的状态来重新分配分片,可以设置为always, indices_primaries_active和indices_all_active,默认是设原创 2012-07-29 22:21:02 · 13646 阅读 · 6 评论 -
分布式搜索elasticsearch中文分词集成
elasticsearch官方只提供smartcn这个中文分词插件,效果不是很好,好在国内有medcl大神(国内最早研究es的人之一)写的两个中文分词插件,一个是ik的,一个是mmseg的,下面分别介绍下两者的用法,其实都差不多的,先安装插件,命令行:安装ik插件:plugin -install medcl/elasticsearch-analysis-ik/1.1.0下载ik相关配置原创 2012-07-27 12:36:36 · 26262 阅读 · 35 评论 -
分布式搜索elasticsearch java API 之(一)------与集群交互
这是关于elasticsearch java api的第一篇教程,陆续会把es的一些心得写出来。可以通过两种方式来连接到elasticsearch(简称es)集群,第一种是通过在你的程序中创建一个嵌入es节点(Node),使之成为es集群的一部分,然后通过这个节点来与es集群通信。第二种方式是用TransportClient这个接口和es集群通信。Node方式创建嵌入节点的方式如下:原创 2012-03-30 21:01:18 · 21439 阅读 · 26 评论 -
elasticsearch2.0对索引操作的一些优化
es2.0已经发布了,改进挺大的,对索引方面的优化的也挺多的。持久化速率自动化2.0之前es对于索引持久化到硬盘的速率默认是20mb一秒,这个值有时候会太小从而导致写入速度过慢从而影响索引速度。2.0对其进行了速率自动化的改进。当merge操作太慢时,会自动提高速率。当merge操作跟上来时再降低速率。这样会使突然间进行的大merge不至于占用整个节点的io从而影响到搜索和索引操作。原创 2015-12-24 20:46:42 · 3773 阅读 · 0 评论 -
Elasticsearch源码分析之一——使用Guice进行依赖注入与模块化系统
elasticsearch使用google开源的依赖注入框架guice,这个项目号称比spring快100倍,具体性能没有测试过,不过由于其代码比较简洁,比spring快很有可能,是不是快那么多就不知道了。先介绍下guice的基本使用方法。elasticsearch是直接把guice的源码放到自己的包内(es把很多开源项目的代码都直接集成到自己项目中,省得依赖一堆的jar包,也使es的jar包原创 2012-09-19 19:50:15 · 11118 阅读 · 10 评论 -
生产环境使用elasticsearch遇到的一些问题以及解决方法(不断更新)
1.由gc引起节点脱离集群 因为gc时会使jvm停止工作,如果某个节点gc时间过长,master ping3次(zen discovery默认ping失败重试3次)不通后就会把该节点剔除出集群,从而导致索引进行重新分配。解决方法:(1)优化gc,减少gc时间。(2)调大zen discovery的重试次数(es参数:ping_retries)和超时时间(es参数:ping_ti原创 2012-11-17 02:23:12 · 72185 阅读 · 55 评论 -
分布式搜索elasticsearch------索引修复
在使用基于lucene的各类搜索引擎(如:elasticsearch、solr)时,有可能出现类似如下的错误:Caused by: java.io.EOFException: read past EOF: NIOFSIndexInput(path="/usr/local/sas/escluster/data/cluster/nodes/0/indices/index/5/index/_59ct原创 2012-12-14 19:54:20 · 11725 阅读 · 9 评论 -
分布式搜索elasticsearch单机与服务器环境搭建
先到http://www.elasticsearch.org/download/下载最新版的elasticsearch运行包,本文写时最新的是0.19.1,作者是个很勤快的人,es的更新很频繁,bug修复得很快。下载完解开有三个包:bin是运行的脚本,config是设置文件,lib是放依赖的包。如果你要装插件的话就要多新建一个plugins的文件夹,把插件放到这个文件夹中。1.单机环境:原创 2012-03-31 14:20:57 · 16541 阅读 · 11 评论 -
分布式搜索elasticsearch配置文件详解
elasticsearch的config文件夹里面有两个配置文件:elasticsearch.yml和logging.yml,第一个是es的基本配置文件,第二个是日志配置文件,es也是使用log4j来记录日志的,所以logging.yml里的设置按普通log4j配置文件来设置就行了。下面主要讲解下elasticsearch.yml这个文件中可配置的东西。cluster.name: elasti原创 2012-04-02 10:26:57 · 26950 阅读 · 24 评论 -
分布式搜索elasticsearch java API 之(七)------与MongoDB同步数据
elasticsearch提供river这个模块来读取数据源中的数据到es中,es官方有提供couchDB的同步插件,因为项目用到的是mongodb,所以在找mongodb方面的同步插件,在git上找到了elasticsearch-river-mongodb。 这个插件最初是由aparo写的,最开始的功能就是读取mongodb里面的表,记录最后一条数据的id,根据时间间隔不断访问m原创 2012-06-26 21:25:19 · 14978 阅读 · 41 评论 -
分布式搜索elasticsearch集群监控工具bigdesk
bigdesk是elasticsearch的一个集群监控工具,可以通过它来查看es集群的各种状态,如:cpu、内存使用情况,索引数据、搜索情况,http连接数等。项目git地址: https://github.com/lukas-vlcek/bigdesk。和head一样,它也是个独立的网页程序,使用方式和head一样。插件安装运行:1.bin/plugin -install lukas-原创 2012-11-21 14:43:09 · 19801 阅读 · 23 评论 -
分布式搜索elasticsearch集群管理工具head
elasticsearch-head是一个elasticsearch的集群管理工具,它是完全由html5编写的独立网页程序,你可以通过插件把它集成到es。或直接下载源码,在本地打开index.html运行它。该工具的git地址是: https://github.com/Aconex/elasticsearch-head插件安装方法:1.elasticsearch/bin/plu原创 2012-11-17 14:38:41 · 29453 阅读 · 2 评论 -
分布式搜索elasticsearch java API 之(二)------put Mapping定义索引字段属性
Mapping,就是对索引库中索引的字段名及其数据类型进行定义,类似于关系数据库中表建立时要定义字段名及其数据类型那样,不过es的mapping比数据库灵活很多,它可以动态添加字段。一般不需要要指定mapping都可以,因为es会自动根据数据格式定义它的类型,如果你需要对某些字段添加特殊属性(如:定义使用其它分词器、是否分词、是否存储等),就必须手动添加mapping。有两种添加mapping的方原创 2012-04-14 13:53:39 · 22859 阅读 · 53 评论 -
分布式搜索elasticsearch java API 之(五)------搜索
elasticsearch的查询是通过执行json格式的查询条件,在java api中就是构造QueryBuilder对象,elasticsearch完全支持queryDSL风格的查询方式,QueryBuilder的构建类是QueryBuilders,filter的构建类是FilterBuilders。下面是构造QueryBuilder的例子: import static org.elasti原创 2012-05-27 09:49:20 · 26111 阅读 · 61 评论 -
分布式搜索elasticsearch java API 之(四)------删除索引数据
删除api允许从特定索引通过id删除json文档。有两种方法,一是通过id删除,二是通过一个Query查询条件删除,符合这些条件的数据都会被删除。一、通过id删除下面的例子是删除索引名为twitter,类型为tweet,id为1的文档:DeleteResponse response = client.prepareDelete("twitter", "tweet", "1")原创 2012-04-14 14:50:41 · 22092 阅读 · 4 评论 -
分布式搜索elasticsearch java API 之(三)------索引数据
es索引数据非常方便,只需构建个json格式的数据提交到es就行,下面是个java api的例子 XContentBuilder doc = jsonBuilder() .startObject() .field("title", "this is a title!") .fiel原创 2012-04-14 14:21:27 · 18791 阅读 · 28 评论 -
分布式搜索方案选型之二:Solandra
我在学校项目实践时使用过solandra,它是一个基于solr和nosql数据库cassandra的分布式搜索引擎。cassandra是由facebook开源的nosql数据库,facebook的信箱搜索就是基于它实现的,它是基于列结构的,不同与关系数据库。它的数学模型基于google的bigtable和Amazon的Dynamo,它的一个重要特性是没有对外没有中心节点,所以不会存在单点故障的问题原创 2012-03-14 21:28:06 · 7463 阅读 · 1 评论 -
分布式搜索方案选型之四:Solr+Katta
一个叫katta的开源项目进入我的视线,它是一个分布式索引建立和管理工具,底层是hadoop的hdfs分布式文件系统,hadoop是当今云计算的热门使用项目,由apatch开源是一个海量数据的处理和存储方案,它的主要核心就是它的hdfs分布式文件存储系统和mapreduce算法,它们分别是google论文中的gfs和mapreduce的开源实现。目前大公司的云计算平台基本上都是基于它来搭建的。因为原创 2012-03-14 21:33:04 · 7937 阅读 · 4 评论 -
分布式搜索方案选型之三:SolrCloud
逛solr官网时无意发现了solrCloud这个开源项目,即solr云或叫分布式solr。它是基于solr的,使用zookeeper作为节点之间通信管理,它具有solr的所有特征,并提供索引分片的功能,不过这是要自己在配置文件中配置分片信息的。它好的地方是它是个实时的搜索引擎,即将推出的lucene4.0将实现实时搜索,而solrCloud就是基于开发中的lucene4.0的,目前solrClou原创 2012-03-14 21:31:01 · 6247 阅读 · 4 评论 -
分布式搜索方案选型之一:Solr
我第一个了解到的分布式搜索框架是solr,它是由java开发的,基于lucene的分布式搜索引擎,提供了类似于webserver的编程接口,是一个比较成熟的搜索引擎,目前很多公司都在使用。很快我就部署了一个由4台机器组成的solr集群,开始导公司的数据进去测试,导的数据为200万。导入速度非常快。接下来就开始测试查询效率,发现它是有缓存的,第一次查询的时间基本上在80~150毫秒之间,第二次查由于原创 2012-03-14 21:24:43 · 5772 阅读 · 1 评论 -
分布式搜索elasticsearch java API 之(六)------批量添加删除索引
elasticsearch支持批量添加或删除索引文档,java api里面就是通过构造BulkRequestBuilder,然后把批量的index/delete请求添加到BulkRequestBuilder里面,执行BulkRequestBuilder。下面是个例子:import static org.elasticsearch.common.xcontent.XContentFactory.原创 2012-05-27 10:08:24 · 16511 阅读 · 31 评论 -
Nutch1.2增加IKAnalyzer中文分词
原版nutch中对中文的处理是按字划分,而不是按词划分。为适应我们的使用习惯必须加上中文分词,我加的是 IKAnalyzer。下面是我的方法,我把前台和后台爬虫用两种方法实现中文分词,后台直接替换nutch的analyzer,前台则修改NutchAnalysis.jj(注:我的前台和后台是两个项目)。前台修改:在src/java/org/apache/nutch/analysis包下找到N原创 2010-12-12 16:49:00 · 4056 阅读 · 10 评论 -
Solr1.4+Nutch1.2构建分布式搜索服务
网上有很多文章介绍配置solr+nutch,但感觉没多少是完整的,有些只是配置出用solr建立nutch索引并能用solradmin查找到数据就完事,我这篇文章主要介绍怎样把solr集成到nutch的搜索前台,让nutch能用到solr的索引服务从而构建出分布式搜索服务。由于本文主要介绍solr和nutch的集成,nutch的配置和爬取不在本文的讨论范围,需要的可以网上搜集相关资料,还有本文所说的原创 2010-12-22 15:03:00 · 6131 阅读 · 5 评论 -
nutch2.0+cassandra中文网页乱码问题
用nutch2.0+cassandra1.0爬取和存储网页时发现gbk编码的网页解析提取文本时中文全都变成乱码,非常奇怪,之前nutch1.x从来就不会出现中文乱码的问题的,因为nutch1.x和nutch2.x用的爬虫代码差不多是一样的,所以我猜可能是保存到cassandra时有问题。看了下它保存网页到cassandra的源码,所有需要保存的值它都转换成二进制封装成ByteBuffer对象传到g原创 2012-07-24 21:19:10 · 4023 阅读 · 6 评论 -
Nutch1.2插件实现or查询
Nutch的搜索前台的默认搜索方式是and,也就是所有关键词都必须出现。现在想实现or查询发现nutch本身并不支持,在去官方论坛搜索无果,改源代码无果的情况下想到用插件实现or查询,于是参照query-base插件改写了个query-or插件,源码如下:public class OrQueryFilter implements QueryFilter { private Configur原创 2011-01-23 00:44:00 · 2026 阅读 · 8 评论 -
Nutch1.2增加插件例子
今尝试下给nutch1.2增加一个插件,于是到官网找了个例子,链接如下:http://wiki.apache.org/nutch/WritingPluginExample-0.9这个例子实现的的是推荐网站,就是写关键字在content里,当别人搜索这个关键字时,你推荐的网站在搜索结果中排前,要实现推荐必须在你的网页上加上 这条属性才能被插件识别。由于它这个例子是用nutch0.原创 2010-10-09 13:24:00 · 3421 阅读 · 7 评论 -
nutch集成中文分词搜索时出现空白页解决方法
最近在研究nutch,我根据网上教程用插件方法把中文分词集成到nutch1.2中,运行爬虫可以,但把项目ant成war后,在网页中搜索索引里没有的词时能显示页面,但如果搜索索引里有的词语就会出现一个空白页,什么也没有,tomcat的控制台能显示出搜索结果,也没报错。于是我就一点一点地把新增代码移除,结果发现是替换了nutch原本分词的问题。网上的有些教程说要修改NutchDocumentAnaly原创 2010-10-04 12:33:00 · 2542 阅读 · 11 评论 -
nutch1.3和solr3.x集成时出现Invalid UTF-8 character问题
今天更新了下nutch,发现已经出了1.3版,下载时就发现只有70多M,之前的可是100多M的,肯定是什么东西删了,下载完后发现原来nutch自带的搜索功能都被删了,现在只能用solr作为索引和搜索来使用。于是就配了个solr3.2,运行一下试试,结果到建立索引时出现了[was class java.io.CharConversionException] Invalid UTF-8 charact原创 2011-08-15 20:40:27 · 3483 阅读 · 0 评论 -
nutch1.2运行时可能发生的错误以及解决办法
错误1.由linux下允许打开的最大文件数量引起错误消息:java.io.IOException: background merge hit exception: _0:C500->_0 _1:C500->_0 _2:C500->_..... [optimize] at org.apache.lucene.index.IndexWriter.optimize(IndexWriter.j原创 2011-06-18 20:31:00 · 2651 阅读 · 5 评论 -
nutch1.2标题关键词高亮方法
根据下面这个链接教程编码后试验发现标题只是加上了标签,并没有实现标签的效果。不知道作者用的是那个版本的nutch,我用1.2版没效果。http://hi.baidu.com/conquer84/blog/item/50bc43eea1a147fdb2fb959a.html 链接的教程: 在org.apache.nutch.searcher.HitDetails这个类中原创 2010-10-04 12:09:00 · 2420 阅读 · 7 评论