1.基本概念
类比传统的关系型数据库领域来说,索引相当于SQL中的一个数据库,或者一个数据存储方案(schema)。索引由其名称(必须为全小写字符)进行标识,并通过引用此名称完成文档的创建、搜索、更新及删除操作。一个ES集群中可以按需创建任意数目的索引。
类型(Type)
类型相当于“表”。
文档(Document)
基于JSON格式进行表示。文档由一个或多个域组成,每个域拥有一个名字及一个或多个值,有多个值的域通常称为“多值域”。每个文档可以存储不同的域集,但同一类型下的文档值应该有某种程度上的相似之处。
2.查询类型
文档中,域的数据存储时支持“string”、“numbers”、“Booleans”和“dates”几种类型,不同类型的数据在索引时是略有区别的。在创建文档时,Elasticsearch会通过检查域的值来动态为其创建mapping,可通过Mapping API来查看type的mapping,其访问端点是_mapping。
精确值(Exact values)查询:就是指数据未曾加工过的原始值——过滤DSL(filter DSL)
Full-text查询:则用于引用文本中的数据——查询DSL(query DSL)
3.DSL
Filter DSL计算及过滤速度较快,且适于缓存,因此可有效提升后续查询请求的执行速度。
Query DSL不仅要查找匹配的文档,还需要计算每个文件的相关度分值,因此为更重量级的查询,其查询结果不会被缓存
Queries用于查询上下文,而filters用于过滤上下文,不过,Elasticsearch的API也支持此二者合并运行。组合查询可用于合并查询子句,组合过滤用于合并过滤子句,然而,Elasticsearch的使用习惯中,也常会把filter用于query上进行过滤。不过,很少有机会需要把query用于filter上的。
4.查询语法
ElasticSearch 基本查询语法blog.csdn.net
一个查询语句的典型结构:
{
QUERY_NAME: {
ARGUMENT: VALUE,
ARGUMENT: VALUE,...
}
}
如果是针对某个字段,那么它的结构如下:
{
QUERY_NAME: {
FIELD_NAME: {
ARGUMENT: VALUE,
ARGUMENT: VALUE,...
}
}
}
查询语句形式:
- 叶子语句(Leaf clauses) (就像
match
语句) 被用于将查询字符串和一个字段(或者多个字段)对比。 - 复合(Compound) 语句 主要用于 合并其它查询语句。 比如,一个
bool
语句 允许在你需要的时候组合其它语句,无论是must
匹配、must_not
匹配还是should
匹配,同时它可以包含不评分的过滤器(filters)
5.检索结果描述
https://www.elastic.co/guide/cn/elasticsearch/guide/current/empty-search.htmlwww.elastic.co
空搜索 | Elasticsearch: 权威指南 | Elastic
空搜索 | Elasticsearch: 权威指南 | Elasticwww.elastic.co
bool/must条件检索
GET /jd/_search
{
"track_total_hits": true,
"query": {
"bool": {
"must": [
{"bool": {"should": [
{"range": {"InputTime": {"gte": "now-1y"}}},
{"term": {"IsDisabled": "false"}}
]
}
}
]
}
}
}
GET recruit-center-resume/_search
{
"query": {
"bool": {
"must": [
{"term": {"ResumeType": 0}}
]
}
}
}