elasticsearch的java搜索语法

elasticsearch作为开源的搜索引擎,支持复杂的搜索,本文示例用java客户端实现的搜索。 1、maven引入依赖jar包 <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>1.1.0</version> </dependency> 2、产生client Settings settings = ImmutableSettings.settingsBuilder() .put("client.transport.sniff", true) .build(); TransportClient client = new TransportClient(settings); 3、使用query查询 SearchResponse actionGet = client.prepareSearch("indexName") .setTypes("typeName") .setQuery( QueryBuilders.boolQuery().must(QueryBuilders.termQuery("attr1", "value1")) ).execute().actionGet(); SearchHits hits = actionGet.getHits(); List<Map<String, Object>> matchRsult = new LinkedList<Map<String, Object>>(); for (SearchHit hit : hits.getHits()) { matchRsult.add(hit.getSource()); } 查询条件有好多种形式,都可以通过QueryBuilders来构建组合: QueryBuilders.inQuery("attr1", new String[{"value1","value2","value3"}); QueryBuilders.rangeQuery("attr1").gt("value1")//gt lt eq gte lte; 查询的形式和意思都可以根据方法名猜测的出来。 4、使用filter查询 filter和query的使用方式类似,它是使用FilterBuilders来构建查询条件。 不过比query多了or、and关系查询 FilterBuilders.orFilter(FilterBuilders.termFilter("attr1", "value1"),FilterBuilders.termFilter("attr2", "value2")); FilterBuilders.andFilter(FilterBuilders.termFilter("attr1", "value1"),FilterBuilders.termFilter("attr2", "value2")); 是通过 .setPostFilter(filter) 指定给search; 5、分页查询 一种方式是指定from/size ...

2014年5月4日 · 1 分钟

java实现cassandra的增删改查

cassandra使用cql语言作为操作语言,cassandra在2.0之后,在操作上越来越像sql数据库的操作,这样想从传统关系型数据库,切换到cassandra的花,上手成本也越来越低。使用官方java驱动操作cassandra 非常简单。 maven引入驱动包 <dependency> <groupId>com.datastax.cassandra</groupId> <artifactId>cassandra-driver-core</artifactId> <version>2.0.1</version> </dependency> 1、创建应用的唯一session。 Cluster cluster = Cluster.builder() .addContactPoint("192.168.22.161") .build(); 这里构建一个集群对象,“192.168.22.161” 是cassandra的种子节点(seed node). Session session = cluster.connect(); 你也可以针对一个特定的keyspace获取一个session Session session = cluster.connect("mykeyspace"); session是线程安全的,所以一个应用中,你可以只有一个session实例,官方建议一个keyspace一个session。 2、session可以直接支持执行cql语句。 String cql = "select * from mykeyspace.tablename;"; session.execute(cql); 你完全可以用这种方式完成任意操作,记住cql语句后面一定要带分号。 3、如果你不想繁琐的去拼字符串,你可以用com.datastax.driver.core.Querybuilder。 insert 一条记录String cql = “insert into mykeyspace.tablename(a,b) values(1,2);” 你可以这样写: session.execute( QueryBuilder.insertInto("mykeyspace", "tablename") .values(new String[]{"a","b"}, new Object[]{1,2})); delete 记录String cql = “delete from mykeyspace.tablename where a=1”; 你可以这样写: session.execute(QueryBuilder.delete() .from("mykeyspace", "tablename") .where(QueryBuilder.eq("a", 1))); update 记录String cql = “update mykeyspace.tablename set b=2 where a=1” ...

2014年4月27日 · 1 分钟

cassandra关于集合类型的操作

举例: create table test( a int, b list<text>, c set<text>, d map<text,text>, primary key(a) ); 插入使用下面的形式 insert into test(a,b,c,d) values(1,[’listtext1’,’listtext2’],{‘settext1’,‘settext2’},{‘mapkey1’:‘mapvale2’,‘mapkey2’:‘mapvalue2’}); 第一: list类型 增加元素: update test set b=b+[’listtext3’,’listext4’] where a=1; 删除第i个元素: 你可以使用 delete b[i] from test where a=1; 或者 update test set b[i]=null where a=1; 注:后者的方法是可行的,不过官方文档没有说明 删除内容为listtext1和listtext2的元素 update test set b = b-[’listtext1’,’listtext2’] where a=1; 第二: Set类型 增加元素 update test set c=c+{‘settext3’,‘settext4’} where a=1; 删除元素 update test set c=c-{‘settext1’,‘settext2’} where a=1; ...

2014年4月25日 · 1 分钟

cassandra2.0 如何实现分页查询

本文用到的cassandra的版本是2.0.6版 1、前提和约束 create table test(a int,b int,c int, d string,e string,primary key(a,b,c)); create index on test(d); cassandra的查询具有以下约束: 第一主键 只能用=号查询 第二主键 支持= > < >= <= 但是必须后面加 ALLOW FILTERING 索引列 只支持=号 2、分页查询 首先使用limit 关键字来限制查询结果的条数 进行分页。 进行翻页是个比较复杂的过程。 需要明确查询出来的结果是按token(a) 来排序的,其次是按(b,c)来排序的。 假设无任何查询条件的查询,第一次查询语句是 select * from test limit 10; 出来的第10条记录的主键需要记录下来,假设为 a10 b10 c10 那么进行第二次查询的时候,语句应该这样写: select * from test where token(a)=token(a10) and (b,c)>(b10,c10) limit 10; 假设查出来只有6条, 那么需要继续查出来4条,语句应该这样写: select * from test where token(a)>token(a10) limit 4; 如果后面扔有数据,第20条记录的主键也要记录下来,假设为 a20 b20 c20 ...

2014年4月12日 · 1 分钟

使用rman对oralce数据进行全备份

rman是对oracle数据库进行备份和恢复的工具。使用rman对oracle进行数据库全备份,步骤如下: 第一:登录rman 使用oracle用户 执行rman target / 可进入rman 第二:查看和删除备份 进入rman后 执行list backup命令 可以看到所有的备份集,以及存放目录 执行delete backupset bsid 可以删除某一个备份 bsid 是备份集的id,在执行list backup的时候可以看到显示为“BS”的那一列就是。 第三:配置默认备份路径 全备份的话,备份的数据可能很大,你要吧备份路径配置到空间充裕的磁盘 命令是: CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT ‘/home/oracle/rman_back/%U’ CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO ‘/home/oracle/rman_back/%F’ 一个是备份文件的路径,一个是备份文件的控制文件的路径%U和%F是一种备份后文件名的格式,你可以网上查到。 你可以通过show all命令 查看你的配置 第四:进行全备份并且清除归档日志 执行:backup database plus archivelog delete input; 意思是:备份全库及控制文件、服务器参数文件与所有归档的重做日志,并删除旧的归档日志。 你要大胆的去执行,不要怕,即便中途中断也没关系,删除备份,重新执行也是可的,不会对数据库有什么破坏。 大体有用的步骤就是这个样子,除此之外的命令,例如只备份表,增量备份的语句,还有定时自动备份,备份脚本等等,你可以在此基础上百度了。

2014年4月11日 · 1 分钟

oracle基于裸设备(raw device)扩充表空间

首先在oracle中查询表空间的使用情况,确认是哪个表空间不足。 select df.tablespace_name “Tablespace”,df.bytes/(10241024) “Total Size(MB)”, sum(fs.bytes)/(10241024) “Free Size(MB)”, round(sum(fs.bytes)*100/df.bytes) “% Free”, round((df.bytes-sum(fs.bytes))*100/df.bytes) “% Used” from dba_free_space fs, (select tablespace_name, sum(bytes) bytes from dba_data_files group by tablespace_name ) df where fs.tablespace_name = df.tablespace_name group by df.tablespace_name, df.bytes; 1、查看所有逻辑卷组(LVM分区系统中术语,类似于物理硬盘) vgdisplay 会显示所有的卷组的详情 vgdisplay -v 具体的卷组名 会显示该具体卷组的详情 包括卷组下面的逻辑卷(LVM分区系统中术语,类似于硬盘分区) 2、从逻辑卷组中分出一个逻辑卷 lvcreate –L 10240m -n lvName11 vgName2 vgName就是逻辑卷组的名字,假设这个卷组下已经有lvName1 lvName2 lvName3 lvName4…共10个逻辑卷了,那么你就创建lvName11好了 你划分好了之后,会生成一个 /dev/vgName2/lvName11 文件 3、查看当前所有的裸设备 raw -qa 你会看到所有的raw裸设备,假设有/dev/raw/raw1 /dev/raw/raw2 /dev/raw/raw3…假设有10个 4、把划分的逻辑卷绑定到一个新的裸设备上 raw /dev/raw/raw11 /dev/vgName2/lvName11 5、改变裸设备的属主为oracle,保证oracle·用户可以使用 hown oracle:oinstall /dev/raw/raw11 6、登陆oracle,把裸设备添加到空间不足的表空间上 sqlplus / as sysdba ALTER TABLESPACE tablespaceName ADD DATAFILE ‘/dev/raw/raw11’ SIZE 10200M REUSE ...

2014年3月28日 · 1 分钟