ElasticSearch搜索
搜索方式——ES有两种搜索方式:第一种是通过URL参数进行搜索,另一种是通过POST请求参数进行搜索。
URL参数搜索
请求:GET http://127.0.0.1:9200/xy_order/order/_search?
参数,多个参数用&分开,参数的解释如下:
参数 | 解释 |
---|---|
q | 查询字符串,例如:q=syslog |
df | 当查询中没有定义前缀的时候默认使用的字段 |
analyzer | 当分析查询字符串的时候使用的分词器 |
lowercase_expended_terms | 搜索的时候忽略大小写标志,默认为true |
analyze_wildcard | 通配符或者前缀查询是否被分析,默认为false |
default_operator | 默认多个条件的关系,AND或者OR,默认为OR |
lenient | 如果设置为true,字段类型转换失败的时候将被忽略,默认为false |
explain | 在每个返回结果中,将包含评分机制的解释 |
_source | 是否包含元数据,同时支持_source_include和_source_exclude |
fields | 只返回索引中指定的列,过个列中间用逗号隔开 |
sort | 根据字段 名排序,例如fieldName:asc或者fieldName:desc |
track_scores | 评分轨迹,当排序的时候,true表示返回评分的信息 |
timeout | 超时的时间设置 |
terminate_after | 在每个分片中查询的最大条数,如果设置,返回结果中会有一个terminated_early字段 |
from | 返回的索引匹配结果的开始值,默认为0 |
size | 搜索结果返回的条数,默认为10 |
search_type | 搜索的类型,可以是dfs_query_then_fetch,query_then_fetch,默认为query_then_fetch |
POST请求参数搜索
请求:POST http://127.0.0.1:9200/xy_order/order/_search
,参数在请求中
参数是JSON格式的查询领域语法(query dsl),例如:
{
"query":{"term":{"cbid":"9414722503469204"}}
}
如果需要搜索分页,可以通过from size组合来进行,from表示从第几行开始,size表示查询多少条记录。from默认为0,size默认为10,例如:
{
"from":0,
"size":10,
"query":{
"term":{"cbid":"9414722503469204"}
}
}
搜索排序:
当搜索的字段有多个时,可以对指定字段进行排序,例如下面的搜索优先对type字段进行排序,然后对message字段进行排序:
{
"sort":[
{"amount":{"order":"asc"}},
{"ConsumeTime":{"order":"desc"}}
]
}
当一个字段的内容有多个值的时候,系统支持一些计算进行排序,包括min、max、sum、avg、median(中间值),例如下面的请求表示order有多个值,取平均值排序的方式如下:
{
"query":{
...
}
"sort":[
{"amount":{"order":"desc", "mode":"avg"}}
]
}
数据列过滤
数据列过滤允许在查询的时候不显示原始数据,或者显示部分原始字段,例如不显示原始字段
{
"_source":false,
"query":{"term":{"cbid":"9414722503469204"}}
}
显示部分文档列的方式如下:
{
"_source":"obj.*",
"query":{"term":{"cbid":"9414722503469204"}}
}
还可以包含或者排除某些列
{
"_source":{
"include":["book1.*","book2.*"],
"exclude":["*.description"]
},
"query":{"term":{"cbid":"9414722503469204"}}
}
脚本支持
对搜索是支持脚本的,例如,请求:POST http://127.0.0.1:9200/xy_order/order/_search?pretty
参数如下:
{
"query":{
"term":{"cbid":"9414722503469204"}
},
"script_fields":{
"test1":{"script":"doc['cbid'].value *2"}
}
}