`
donlianli
  • 浏览: 340377 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
Group-logo
Elasticsearch...
浏览量:218539
社区版块
存档分类
最新评论
文章列表
前端 假如让我设计一个新的系统,我一定不会使用extjs作为ui。因为大的系统一般都是面向互联网用户的,互联网又会因为南北网络不统一,导致系统网络延迟很大。而且,使用这种富客户端构建的系统,很浪费网络带宽。 假如一个系统的附件或图片很多,我一定会将附件和图片放到一个单独的服务器上面。这样实现动态资源和静态资源的分离,而不是将附件和图片放到数据库,去浪费数据库的性能。   缓存 如果让我做一个超过1万人使用的系统,我一定会非常重视系统的缓存。将一些热数据存储到memcached;为一些常用的检索或搜索结果构建细粒度的缓存,能够很大程度的提高系统性能。   检索或搜索 如果用户对检 ...
想要给elasticsearch安装一个中文分词插件,网上的资料都有点过时。 现在记录一下从源码安装ik插件的过程。 (注:我用的版本是0.90.2)。   1、下载源码 首先去ik的git网站下站源码,网址:https://github.com/medcl/elasticsearch-analysis-ik 下载完源码后,发现没有对应的jar包。我用mvn package,打了一个jar包。 打包后名称最后是:elasticsearch-analysis-ik-1.2.2.jar   2、文件拷贝。 这一步很简单,将jar包拷贝到ES_HOME/plugin/analy ...
Java的垃圾回收真是让人又恨又爱。当今大内存已经成为服务器的趋势,使用CMS垃圾回收有点捉襟见肘。为何要使用g1垃圾回收,我想用过es的人都会很清楚。下面我就介绍一下在elasticsearch中,如何使用G1垃圾回收。 首先找到es的配置文件。elasticsearch.in.sh,这个文件在es的bin目录下面。 然后找到配置垃圾回收的配置。 # Force the JVM to use IPv4 stack if [ "x$ES_USE_IPV4" != "x" ]; then JAVA_OPTS="$JAVA_OPTS ...
Elasticsearch的mapping一旦创建,只能增加字段,而不能修改已经mapping的字段。但现实往往并非如此啊,有时增加一个字段,就好像打了一个补丁,一个可以,但是越补越多,最后自己都觉得惨不忍睹了。怎么办?? 这里有一个方 ...
在Elasticsearch中找一个复制索引的接口真难。现在官方唯一推荐的方法是使用游标获得被复制索引的所有document,然后使用bulkIndex新建立一个索引。   这个接口也很奇怪,第一次search竟然不返回数据。 import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.action.search.SearchType; import org.elasticsearch.client.Client; import org.elasticsearch.common. ...
通常,在项目中需要联想输入(即输入关键字,提示相关词条,类似百度google的搜索)的需求,可能大家都是用的数据库的like '%关键字%‘来实现。但是这样实现有几个问题。 第一、这样的搜索无论是oracle还是mysql,都是无法使用索引的。在oracle中可能有全文检索可以使用,但是个人感觉效果不是很好。 第二、输入的关键字有like的通病,就是只有保含关键字的词条才会被命中。如果中间加个空格之类的,db就无能为力了。 第三、如果要想对命中结果进行相关度排序,这个在常规数据库是无法做到的。虽然,可以按照命中词条的长度进行升序排序,但是加上排序,性能不是很好。   下面介绍一下使 ...
Elasticsearch中的mapping一旦创建,就不能再修改。但是添加字段是可以的。其实很简单,只需在原来的mapping上面直接新增加一个field,然后重新创建一下mapping就可以了。   原mapping的定义如下: private static XContentBuilder getMapping() throws Exception{ XContentBuilder mapping = jsonBuilder() .startObject() .startObject("test") ...
截止到0.90.x的版本,Elasticsearch已经将connectedNodes从api中去掉,具体代替的方法是什么呢?也没有找到相关的说明。 因此决定自己手工写一个工具类。其实,我们只有通过API去执行一个方法,就可以测试连接是否正常。测试的方法选定为获得集群node的信息。测试代码:   import java.util.Map; import org.elasticsearch.action.admin.cluster.node.info.NodeInfo; import org.elasticsearch.action.admin.cluster.node.info.N ...
在之前的一篇文章中,写到如何创建mapping。里面只是简单的创建了一个mapping。其实,这种比较重要并且一旦建立无法修改的操作还是需要仔细规划的。 今天我介绍设置index的分片数量及副本数量,即创建索引的如何指定分片的个数及副本的个数。分片的个数在创建之后是无法再增加和减少的,除非你另外建一个索引库,而副本是可以在运行的时候,动态增加和减少。因此,在创建索引库时,规划好分片(Shard)是非常重要的。   1、如何在创建index时,指定分片的个数? 其实代码也很简单。 Settings settings = ImmutableSettings.settingsBuilde ...
今年一直关注log4j 2,但至今还没有出正式版。等不及了,今天正式向大家介绍一下log4j的升级框架,log4j 2。   log4j,相信大家都熟悉,至今对java影响最大的logging系统,至今仍有很多系统在使用log4j,但毕竟这个版本出的太早 ...
想要在Java API中获得一个mapping 还真困难,以此铭记。 import org.elasticsearch.client.Client; import org.elasticsearch.cluster.ClusterState; import org.elasticsearch.cluster.metadata.IndexMetaData; import org.elasticsearch.cluster.metadata.MappingMetaData; import com.donlianli.es.ESUtils; public class GetMappi ...
相当于数据库的表结构的定义,elasticsearch的mapping 也很重要。直接关系到性能及搜索结果的准确性。elasticsearch的java api的例子太少,我在这儿就献丑了。 为了说明mapping的定义,我这里定义了一个简单的模型,就ID,type,和catIds 3个属性,重在说明如何使用java api来定义mapping,具体各field应该如何定义,这里不做讨论。 public class TestModel implements Serializable { private static final long serialVersionUID = 3174 ...
请看一个测试: 1、快速排序100次,然后计算排序一次所需要的时间。   public QuickSort() { long beginTime = System.nanoTime(); //排100遍 int b[]=a.clone(); for(int i=0;i<100;i++){ quick(b); } long total = System.nanoTime() - beginTime; //181 ...
前言: 代码简洁与性能高效无法两全其美,本文章专注于并发程序的性能,如果您追求代码简洁,本文章可能不太适合,本文章属于Java Concurrency in Practice读书笔记。 在java5中,新增加ReentrantLock提供了一种比synchronized更为灵活的锁机制。为啥说灵活,而不是说性能更高呢?ReentrantLock提供的锁功能跟synchronized的功能基本是一致的,就是一翻版的synchronized类。但是它支持可轮询,定时及可中断的机制,所以说它是更灵活的。为啥没说他性能更高呢?因为这个在java6及以上,性能跟synchronized的基本持平。 ...
一、5年工作生活经历 08年毕业于一个很普通的院校。还没有毕业,就已经来北京实习,实习结束后顺利转正。毕业时,朋友给我介绍一媳妇,瞬间感觉无比幸福。当时每月3k,住北京的集体学生公寓,每月才200,一个月下来还 ...
Global site tag (gtag.js) - Google Analytics