ElasticSearch入门elasticsearch玩转大数据

四十九、Elasticsearch初识搜索引擎-实战篇各种que

2017-07-10  本文已影响169人  编程界的小学生

1、match all

需求:查询全部index的全部type下的全部document

GET /_search
{
  "query": {
    "match_all": {}
  }
}

2、match

需求:查询查询全部index的全部type下的document字段名为title,并且title包含my elasticsearch article的

GET /_search
{
  "query": {
    "match": {
      "title": "my elasticsearch article"
    }
  }
}

注意:搜索时会进行分词,分成my,elasticsearch,article,只要匹配这三个的都会被查出来。

3、multi match

需求:查看test_index索引下test_type类型的test_field和test_field1两个字段包含test的document

GET /test_index/test_type/_search
{
  "query": {
    "multi_match": {
      "query": "test",
      "fields": ["test_field", "test_field1"]
    }
  }
}

4、range query

需求:查询company下employee的年龄大于等于30并且小于等于35的document

GET /company/employee/_search
{
  "query": {
    "range": {
      "age": {
        "gte": 30,
        "lte": 35
      }
    }
  }
}

5、term query

term意味着不会分词,精确匹配。

需求:精确查询test_index/test_type/下test_field是test hello的document

GET /test_index/test_type/_search
{
  "query": {
    "term": {
      "test_field": {
        "value": "test hello"
      }
    }
  }
}

查不出结果,因为不会分词,我们现有document中没有test_field值为test hello的

6、terms query

精确匹配一组(数组),同样不会进行分词

需求:查询tags数组内容是"search", "full_text", "nosql"的document

GET /_search
{
  "query": {
    "terms": {
      "tags": [
        "search",
        "full_text",
        "nosql"
      ]
    } 
  }
}

说明
很少使用term和terms,他只是精确匹配,若想精确匹配某个字段,在建立mapping的时候指定not_analyzed就好了,一般常用match和range

若有兴趣,欢迎来加入群,【Java初学者学习交流群】:458430385,此群有Java开发人员、UI设计人员和前端工程师。有问必答,共同探讨学习,一起进步!
欢迎关注我的微信公众号【Java码农社区】,会定时推送各种干货:


qrcode_for_gh_577b64e73701_258.jpg
上一篇 下一篇

猜你喜欢

热点阅读