Elasticsearch基本搜索

# 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"]
}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值