Elasticsearch轻量查询
Elasticsearch有两种查询方式:
- URI带有查询条件(轻量查询)
- 请求体中带有查询条件(复杂查询)
第一种方式查询能力有限,不是所有的查询都可以使用此方式。而第二种方式将查询条件以JSON格式表现,并作为查询请求的请求体,此方法查询条件更具表现力,建议复杂的查询使用第二种方式。
轻量查询
GET twitter/_search?q=user:kimchy
参数名 | 参数值描述 |
---|---|
q | 查询字符串 |
df | 查询字符串中未指定字段时所使用的默认字段 |
analyzer | 用于查询字符串的分析器 |
analyze_wildcard | 是否分析通配符查询或前缀查询,默认为否 |
default_operator | 默认操作,AND或OR,默认为OR |
lenient | 格式转换错误是否被忽略,默认时否 |
_source | 设置为false时,查询结果不包含_source字段 |
stored_fields | 查询结果包含的字段,使用逗号分隔 |
sort | fieldName:asc/fieldName:desc根据指定字段进行排序,可以存在多个sort(顺序很重要) |
track_scores | 查询结果中是否包含score数据 |
track_total_hits | 查询结果中是否包含total数据 |
timeout | 查询超时时间 |
terminate_after | 每个分片收集文档的上限值,当文档超过上限时会终止查询。并在查询结果中terminated_early表示是否超过上限 |
from | hit中第一个文档的起始位置 |
size | hit中文档的数量 |
search_type | 查询类型,可以是dfs_query_then_fetch或query_then_fetch。默认为query_then_fetch |
查询字符串详解
查询字符串被解析为一系列词项和操作符,即q的参数值
查询字符串格式如下:
- 根据status字段中的内容进行查询,返回字段中包含active的文档。
GET twitter/_search?q=status:active
- 根据title字段中的内容进行查询,返回字段中包含quick或brown的文档。默认操作符为OR
GET twitter/_search?q=title:(quick OR brown)
GET twitter/_search?q=title:(quick brown)
- 根据author字段中的内容进行查询,返回字段中包含John Smith短语的文档。
GET twitter/_search?q=author:"John Smith"
- 根据book.title、book.content等字段中的内容进行查询,返回字段中包含quick或brown的文档。
GET twitter/_search?q=book.\*:(quick brown)
- 根据title字段中的内容进行查询,返回字段不未空的文档。
GET twitter/_search?q=_exists_:title
- 根据title字段中的内容进行查询,返回字段中包含以a开头或以b开头的文档。通配符*标识匹配0个或多个字符,通配符?标识1个字符。
通配符会影响查询效率,会消耗过多的内存。以通配符开头的查询,会匹配索引中所有的文档,不建议使用。
GET twitter/_search?q=title:(a* b?)
- 根据name字段中的内容进行查询,返回字段中匹配//中正则表达式的文档。
GET twitter/_search?q=name:/joh?n(ath[oa]n)/
- 根据name字段中的内容进行查询,返回字段中模糊匹配quikc的文档。模糊匹配的字符最多有2处与quikc不同,包括多字符、少字符、错位。
GET twitter/_search?q=name:quikc~
- 根据count字段中的内容进行查询,返回字段中大于等于1并小于5的文档。
GET twitter/_search?q=count:[1 TO 5}
GET twitter/_search?q=count:(+>=1 +<5)
- 根据title字段中的内容进行查询,返回字段中包含quick或fox的文档。quick文档相关性更高
GET twitter/_search?q=title:(quick^2 fox)
- 根据title字段中的内容进行查询,返回字段中一定包含fox并不包含news的文档。quick brown可有可无,如果存在评分会更高。
GET twitter/_search?q=title:(quick brown +fox -news)