# ES 分为三种查询方式
# 1.基本查询 2.复合查询 3.过滤
# 1.基本查询:可以使用es中内置的一些查询条件进行查询
# 2.复合查询:可以把多个查询条件结合在一些进行复合查询
# 3.过滤:在查询的过程中,使用filter在不影响打分的情况下进行数据筛选
# match查询,使用较多
# _search 查询的接口
GET jobs/job/_search
{
"query": {
"match": {
"title": "服务端"
}
}
}
# term查询
# term不会将搜索的词汇进行分词
GET jobs/job/_search
{
"query": {
"term": {
"title": {
"value": "python"
}
}
}
}
# terms查询
# 将数组中的词分别进行匹配
GET jobs/job/_search
{
"query": {
"terms": {
"title": [
"python",
"redis",
"django"
]
}
}
}
# "analyzer": "ik_max_word"指明使用的分析器
PUT 51jobjobs
{
"mappings": {
"job":{
"properties": {
"title":{
"type": "text",
"analyzer": "ik_max_word",
"store": true
},
"salary":{
"type": "integer",
"store": true
},
"city":{
"type": "keyword",
"store": true
},
"company":{
"properties": {
"company_name":{
"type":"text",
"analyzer": "ik_max_word"
},
"company_adds":{
"type":"text",
"analyzer": "ik_max_word"
}
}
},
"date":{
"type": "date",
"format": "yyyy-MM-dd"
}
}
}
}
}
PUT _bulk
{"update":{"_index":"51jobs","_type":"job","_id":1}}
{"doc":{"title":"python爬虫工程师","salary":9999,"city":"北京","company":{"company_name":"百度","company_addr":"盘古大关"},"date":"2017-9-8"}}
{"update":{"_index":"51jobs","_type":"job","_id":2}}
{"doc":{"title":"python django工程师","salary":8888,"city":"天津","company":{"company_name":"海马","company_addr":"天津市"},"date":"2017-10-8"}}
{"update":{"_index":"51jobs","_type":"job","_id":3}}
{"doc":{"title":"redis python工程师","salary":7777,"city":"南京","company":{"company_name":"南京奥米噶","company_addr":"南京创投"},"date":"2017-11-8"}}
{"update":{"_index":"51jobs","_type":"job","_id":4}}
{"doc":{"title":"搜索引擎工程师","salary":6666,"city":"北京","company":{"company_name":"上海好搜科技有限公司","company_addr":"上海市徐家汇"},"date":"2017-11-7"}}
{"update":{"_index":"51jobs","_type":"job","_id":5}}
{"doc":{"title":"爬虫搜索服务端工程师","salary":5555,"city":"北京","company":{"company_name":"深圳","company_addr":"深圳万科大厦"},"date":"2016-11-8"}}
# 控制查询结果返回的数量
# 可以用来做分页
# from从第几条开始 size获取多少条
GET 51jobs/job/_search
{
"query": {
"match": {
"title": "redis搜索引擎工程师"
}
},
"from": 0,
"size": 2
}
# 查询所有的数据
GET 51jobs/job/_search
{
"query": {
"match_all": {}
}
}
# _analyze测试查看分词解析的结果
# 精确分词(分词非常详细)
GET _analyze
{
"analyzer": "ik_max_word",
"text": "redis搜索引擎工程师"
}
# 模糊分词
GET _analyze
{
"analyzer": "ik_smart",
"text": "redis搜索引擎工程师"
}
# 短语搜索
# match_phrase
# 需要设置搜索的关键词
# 需要对搜索分词后的间隔数做限定
# 将搜索的关键词进行分词,分割为一个列表
# slop设置分词后[搜索,工程,工程师],搜索和工程之间隔了多少个字符
# slop间隔数字大于slop指定的数字的数据不会进行匹配
GET 51jobs/job/_search
{
"query": {
"match_phrase": {
"title":{
"query": "搜索工程师",
"slop":3
}
}
}
}
# 指定从某些字段中进行搜索
# multi_match查询
# query搜索关键词,fileds指定的字段,可以指定多个字段
GET 51jobs/job/_search
{
"query": {
"multi_match": {
"query": "服务南京度",
"fields": ["title","company.company_name"]
}
}
}
# 指定要获取字段的数据
# stored_fields
# store 属性必须把值设置 true
# 在获取数据的时候,只想提取某些字段的数据,其他的都不要了,可以使用stored_fields进行指定
GET 51jobjobs/job/_search
{
"stored_fields": ["title","salary","city"],
"query": {
"multi_match": {
"query": "南京服务度",
"fields": ["title","company.company_name"]
}
}
}
# 指定排序规则,默认降序
# sort 指定排序规则
# desc降序 asc升序
# 排序对应的字段必须为数字或日期类型
GET 51jobs/job/_search
{
"query": {
"match_all": {}
},
"sort": [
{
"salary": {
"order": "asc"
}
}
]
}
# range范围查询 字段必须为数字类型或者日期类型
# gte 大于等于
# gt 大于
# lte 小于等于
# lt 小于
# boost权重
GET 51jobs/job/_search
{
"query": {
"range": {
"salary": {
"gte": 5000,
"lte": 8000,
"boost": 3
}
}
}
}
# 根据时间进行范围查找
# now当前的时间
GET 51jobs/job/_search
{
"query": {
"range": {
"date": {
"gte": "2016-10-1",
"lte": "2017-10-1"
}
}
}
}
# 通配符*
# wildcard
# * 表示一个或者多个任意的字符
GET 51jobs/job/_search
{
"query": {
"wildcard": {
"title": {
"value": "r*s"
}
}
}
}
# fuzzy模糊查询
# 包含关系
# _source 指定显示的字段数据
GET 51jobs/job/_search
{
"query": {
"fuzzy": {
"title":"服务"
}
}
,
"_source": ["title","city","salary"]
}