elasticsearch作为开源的搜索引擎,支持复杂的搜索,本文示例用java客户端实现的搜索。

1、maven引入依赖jar包

1
2
3
4
5
 <dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch</artifactId><version>1.1.0</version>
</dependency>

2、产生client

1
2
3
4
5
        Settings settings = ImmutableSettings.settingsBuilder().put("client.transport.sniff", true).build();TransportClient client = new TransportClient(settings);

3、使用query查询

1
2
3
4
5
6
7
8
9
10
       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来构建组合:

1
2
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关系查询

1
2
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

1
2
3
4
5
6
7
8
SearchResponse actionGet = elasticClient.prepareSearch("indexName").setTypes("typeName").setQuery(
QueryBuilders.boolQuery().must(QueryBuilders.termQuery("attr1", "value1"))).setFrom(100).setSize(200).execute().actionGet();

另外一种是使用Scroll/size,如果结果超过size大小,会返回size条记录,并返回一个scrollId,可以用这个scrollId继续往下查询。

第一次查询

1
2
3
4
5
6
7
8
SearchResponse actionGet = elasticClient.prepareSearch("indexName").setTypes("typeName").setQuery(             QueryBuilders.boolQuery().must(QueryBuilders.termQuery("attr1", "value1")) ).setScroll(new TimeValue(60000)).setSize(200).execute().actionGet();String scrollId = actionGet.getScrollId();

后面的查询

1
2
3
SearchResponse actionGet = elasticClient.prepareSearchScroll(actionGet.getScrollId()).setScroll(new TimeValue(600000)).execute().actionGet();

第二种分页查询必须在设定的缓存时间内往下查询,而且一旦进行了查询就必须往下继续查,不能回头重复查询。

转载于:https://www.cnblogs.com/dayuyanwei/p/7026043.html

elasticsearch的java搜索语法相关推荐

  1. ElasticSearch搜索语法学习(term,filter,bool,terms,range)

    ES搜索语法学习 目录 原始数据 term,filter使用 bool组合多个filter条件来搜索数据 terms搜索多个值以及多值搜索结果优化 基于range filter来进行范围过滤 手动控制 ...

  2. ElasticSearch搜索语法进阶学习(搜索+聚合,过滤+聚合)

    ElasticSearch聚合+搜索语法学习 目录 搜索+聚合:统计指定品牌下每个颜色的销量 global bucket:单个品牌与所有品牌销量对比 过滤+聚合:统计价格大于1200的电视平均价格 b ...

  3. Elasticsearch之Query DSL语法入门

    1. query DSL入门 1.1 DSL query string 后边的参数原来越多,搜索条件越来越复杂,不能满足需求. GET /book/_search?q=name:java&si ...

  4. Elasticsearch之search搜索入门

    1. 搜索语法入门 1.1query string search 无条件搜索所有 GET /book/_search {"took" : 969,"timed_out&q ...

  5. ElasticSearch实现商品搜索与聚合分析

    ElasticSearch实现商品搜索与聚合分析 Gitee地址:https://gitee.com/yuyuuyuy/micro-mall 文章目录 ElasticSearch实现商品搜索与聚合分析 ...

  6. ElasticSearch 之 文本搜索

    ElasticSearch 之 文本搜索 1. 文本搜索简介 2. 倒排索引建立过程 3. 文本的搜索过程 4. 分析器简介 4.1. 字符过滤器 4.2. 分词器 4.3. 分词过滤器 5. 分析器 ...

  7. elk 搜索 语法_ELK学习笔记7| Lucence 的搜索语法

    在kibana进行搜索时,可以使用Lucence 通用的语法,或者使用 JSON 格式 QueryDSL (DSL:Digital Subscriber Line)来进行各项搜索请求.Apache L ...

  8. (转)JAVA正则表达式语法大全

    [正则表达式]文本框输入内容控制 整数或者小数:^[0-9]+\.{0,1}[0-9]{0,2}$ 只能输入数字:"^[0-9]*$". 只能输入n位的数字:"^\d{n ...

  9. java 可以直接当自定义标示符_第2章 Java基本语法.ppt

    <第2章 Java基本语法.ppt>由会员分享,可在线阅读,更多相关<第2章 Java基本语法.ppt(55页珍藏版)>请在人人文库网上搜索. 1.第2章了解Java基本语法, ...

  10. Java基础语法-数据类型与idea配置

    文章目录 day02 - Java基础语法 1. 注释 使用的技巧 注意点 2. 关键字 2.1 概念 2.2 第一个关键字class 3. 字面量 区分技巧 4. 变量 4.1 什么是变量? 4.2 ...

最新文章

  1. 阿里面试官:给我说说Netty是如何在Dubbo中应用的?
  2. 今天,我辞去了亚马逊年薪 50 万美金的工作!
  3. 一文看懂自动驾驶中应用的机器学习算法
  4. 我通过了阿里面试,但算法太差,还是没去!
  5. 用 CSS实现Bubble提示框的两种方法
  6. 计算机辅助设计与图像学学报 改后发表,几种常见图像二值化方法的结果对比与分析...
  7. Google 5.5 亿美金投资了京东?
  8. python使用os.system()方法进行多模块安装
  9. 小米更新显示非官方rom_MIUI官改篇对比分析-极光ROM-台湾W大-星空未来-其他官改官网...
  10. POI 读取word (word2003 和 word2007)
  11. 2022腾讯云学生服务器申请流程(全攻略)
  12. bfm人脸模型和3DDFA及其变种
  13. python- re模块(正则表达式)
  14. 几种软件打包工具的对比
  15. 我能够快速读书的秘密:主要靠“猜”!
  16. mysql报错1593_主从复制报1593错误的处理
  17. 垃圾分类游戏HTML,三七互娱:60秒挑战垃圾分类
  18. 爱康科技拟9.6亿元收购爱康光电 拓展光伏产业链
  19. 记一次“Could not resolve host: mirrorlist.centos.org; 未知的错误“的解决过程
  20. Android中Launcher实例

热门文章

  1. windows 端口占用
  2. 重新认识java-break和continue的标签你用过么
  3. 通过GUID生成可持久化的PID
  4. 设置域用户帐户的登录时间
  5. good nice fine well区别
  6. cocos creator基础-(五)cc.Component使用
  7. 【学习】如何用jQuery获取iframe中的元素
  8. 阿里云中获取文件及目录列表的方法
  9. java:IO流学习小结
  10. SharePoint 2013 的HTML5特性之响应式布局