public class ElasticsearchRangeQuery {
public void esRangeQuery(String masterNodeIp, int port) {
Settings settings = Settings.builder().put("client.transport.sniff", false)
.put("cluster.name", "testRangeQuery")
.put("client.transport.ping_timeout", 60, TimeUnit.SECONDS)
.build();
TransportClient client = new PreBuiltTransportClient(settings);
try {
TransportAddress transportAddress = new TransportAddress(new InetSocketAddress(masterNodeIp, port));
client.addTransportAddress(transportAddress);
String index = "monitor_indices_name-*";
String type = "monitor";
SearchResponse searchResponse = client.prepareSearch(index).setTypes(type)
.setQuery(QueryBuilders.boolQuery()
.must(QueryBuilders.matchPhraseQuery("testField", "testFieldValue"))
.must(QueryBuilders.rangeQuery("time").from("2019-04-05T02:37:48")
.to("2019-04-05T07:57:48")))
.setExplain(true)
.setSize(50)
.execute()
.actionGet();
SearchHits searchHits = searchResponse.getHits();
if (searchHits.getTotalHits() > 0) {
SearchHit[] hits = searchHits.getHits();
for (SearchHit hit : hits) {
System.out.println(hit.getSourceAsString());
} catch (Throwable e) {
e.getStackTrace();
如上述代码所示,其中testRangeQuery
为 Elasticsearch 集群的名称。
rangeQuery
,为范围查询。matchPhraseQuery
,为文本查询;
特别地,无论是通过命令查询,还是通过 API 查询,默认都是展示前 10 条记录,我们可以通过设置size
来调整查询结果的数量。
- 命令查询,直接在查询命令中新增
"size": 50
语句即可; - API 查询,直接调用
setSize(50)
方法即可。
如上述所示,调整命中结果返回前 50 条记录。
最后,还有一点需要我们特别注意,那就是 Elasticsearch 索引中存储的时间格式。如果两者不一致,我们需要在查询前进行转换!
好了,本篇文章到这里就要结束了,希望能够对大家有所帮助。
在使用 Elasticsearch 的时候,我们可能会遇到需要**以范围为条件查询索引数据**的需求。有两种方法可以实现我们的需求:- 第一种:在服务器或者终端,使用命令来查询索引数据;- 第二种:编写程序,通过 Elasticsearch 的 API 来查询索引数据。接下来,我们就以**时间范围**为例,详述这两种查询索引数据的方法。
需求:根据时间范围,查询es中的数据
说明:在使用logstash将关系型数据库中的数据抽到es中时,需要转为时间搓格式保存,这样就可以根据时间搓进行时间范围查询了
注意:如果不对时间字段做处理,默认的保存格式不方便进行时间范围查询
默认保存到es中的时间格式:
这种格式不方便我们的客户端进行时间范围查询
logstash抽取mysql中的数据时,对于datetime类型的字段,可以使用unix...
IDEA 全称 IntelliJ IDEA,是java编程语言的集成开发环境。
(1)community(社区版):免费的IntelliJ IDEA community版本是基于开源代码构建的,可以用于纯JVM 和 Android 开发,拥有大部分开发中所需要的功能,但是不能够提供前端css和js的技术支持。
(2)ultimate(最终版):付费的 IntelliJ IDEA ultimate版本可以支持web端和企业端的开发使用,能支持众多前端和后端框架和技术,可以提供分析和数据库工具、HTTP客户端,
索引结构
1、索引的最小存储单位是innodb定义的数据页
2、对于单个数据页,数据是按顺序存储的,并且数据页头记录了当前页数据的最大和最小值,维护最大和最小值是为了更方便的够成b+树,数据顺序存储,且内存是连续分配的,在查找的时候可二分查找
3、数据页记录FIL_PAGE_PREV和FIL_PAGE_NEXT,b+数叶子节点构成双向链表,在无法使用索引时,可已很方便的进行全表扫描。
聚簇索引
聚簇索引,叶子节点存储的是实际的数据,一般聚簇索引行程的b+树在三层以内,三层满了,数据量117
索引实验
实验目的:了解索引对于全列匹配,最左前缀匹配、范围查询的影响。实验所用数据库见文章最底部连接。
实验软件版本:5.7.19-0ubuntu0.16.04.1-log (Ubuntu)
实验存储引擎:InnoDB
show index from `employees`.`titles`
实验一、全列匹配
explain select * from `employees`.`tit...
import java.net.InetSocketAddress;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Map.Entry;
import org.elasticsearch.action.ListenableActionFuture;
im...
表达是与否概念的字段,必须使用 is_xxx 的方式命名,数据类型是 unsigned tinyint
(1 表示是,0 表示否)。
说明:任何字段如果为非负数,必须是 unsigned。
注意:POJO 类中的任何布尔类型的变量,都不要加 i...