ES基本查询

数据准备

# 创建索引
PUT /lib1
{
 "settings": {
   "number_of_shards": 5
  , "number_of_replicas": 0
},
 "mappings": {
   "user":{
     "properties": {
       "name":{"type":"text"},
       "adress":{"type":"text"},
       "age":{"type":"integer"},
       "interests":{"type":"text"},
       "birthday":{"type":"date"}
    }
  }
}
}
# 添加数据
PUT /lib1/user/1
{
 "name":"zhaoliu",
 "adress":"hei long jiang sheng tie ling shi",
 "age":50,
 "birthday":"1970-10-12",
 "interests":"xi huan hejiu,duanlian,lvyou"
}
PUT /lib1/user/2
{
 "name":"zhaoming",
 "adress":"bei ling dian qu qing he zhen",
 "age":20,
 "birthday":"1998-10-12",
 "interests":"xi huan hejiu,duanlian,changge"
}
PUT /lib1/user/3
{
 "name":"lisi",
 "adress":"bei ling dian qu qing he zhen",
 "age":50,
 "birthday":"1998-10-12",
 "interests":"xi huan hejiu,duanlian,lvyou"
}
PUT /lib1/user/4
{
 "name":"wangwu",
 "adress":"bei ling dian qu qing he zhen",
 "age":20,
 "birthday":"1995-10-12",
 "interests":"xi huan hejiu,duanlian,changge"
}
PUT /lib1/user/5
{
 "name":"zhangsan",
 "adress":"bei jing chao yang qu",
 "age":29,
 "birthday":"1988-10-12",
 "interests":"xi huan tingyinyue,changge,lvyou"
}
# 简单条件查询
GET /lib1/user/_search?q=name:lisi
GET /lib1/user/_search?q=interests:changge&sort=age:desc

term查询和terms查询

  • term query回去倒排索引中寻找确切的term,它并不知道分词器的存在。这种查询适合keyword、numeric、date。

  • term:查询某个字段含有某个关键词的文档

    GET /lib1/user/_search
    {
     "query": {
       "term": {
         "name": "zhaoliu"
      }
    }
    }
    # 查询结果
    {
     "took": 2,
     "timed_out": false,
     "_shards": {
       "total": 5,
       "successful": 5,
       "failed": 0
    },
     "hits": {
       "total": 1,
       "max_score": 0.2876821,
       "hits": [
        {
           "_index": "lib1",
           "_type": "user",
           "_id": "1",
           "_score": 0.2876821,
           "_source": {
             "name": "zhaoliuwu",
             "adress": "hei long jiang sheng tie ling shi",
             "age": 49,
             "birthday": "1970-10-12",
             "interests": "xi huan hejiu,duanlian,lvyou"
          }
        }
      ]
    }
    }
  • terms:查询某个字段里含有多个关键词的文档

    # 查询
    GET /lib1/user/_search
    {
     "query": {
       "terms": {
         "interests": ["hejiu","changge"]
      }
    }
    }
    # 查询的结果为interests字段包含heijiu、changge、hejiu和changge的文档
    {
     "took": 5,
     "timed_out": false,
     "_shards": {
       "total": 5,
       "successful": 5,
       "failed": 0
    },
     "hits": {
       "total": 3,
       "max_score": 1.5467954,
       "hits": [
        {
           "_index": "lib1",
           "_type": "user",
           "_id": "2",
           "_score": 1.5467954,
           "_source": {
             "name": "zhaoming",
             "adress": "bei ling dian qu qing he zhen",
             "age": 20,
             "birthday": "1998-10-12",
             "interests": "xi huan hejiu,duanlian,changge"
          }
        },
        {
           "_index": "lib1",
           "_type": "user",
           "_id": "5",
           "_score": 0.2824934,
           "_source": {
             "name": "zhangsan",
             "adress": "bei jing chao yang qu",
             "age": 29,
             "birthday": "1988-10-12",
             "interests": "xi huan tingyinyue,changge,lvyou"
          }
        },
        {
           "_index": "lib1",
           "_type": "user",
           "_id": "1",
           "_score": 0.2824934,
           "_source": {
             "name": "zhaoliuwu",
             "adress": "hei long jiang sheng tie ling shi",
             "age": 49,
             "birthday": "1970-10-12",
             "interests": "xi huan hejiu,duanlian,lvyou"
          }
        }
      ]
    }
    }
    # 指定返回结果为2个文档
    GET /lib1/user/_search
    {
     "from": 0,
     "size": 2,
     "query": {
       "terms": {
         "interests": ["hejiu","changge"]
      }
    }
    }
    # 指定返回结果中含版本号
    GET /lib1/user/_search
    {
     "from": 0,
     "size": 2,    "version": true,  "query": {    "terms": {      "interests": ["hejiu","changge"]   } }}# 查询结果{  "took": 5,  "timed_out": false,  "_shards": {    "total": 5,    "successful": 5,    "failed": 0 },  "hits": {    "total": 3,    "max_score": 1.5467954,    "hits": [     {        "_index": "lib1",        "_type": "user",        "_id": "2",        "_version": 3,        "_score": 1.5467954,        "_source": {          "name": "zhaoming",          "adress": "bei ling dian qu qing he zhen",          "age": 20,          "birthday": "1998-10-12",          "interests": "xi huan hejiu,duanlian,changge"       }     },     {        "_index": "lib1",        "_type": "user",        "_id": "5",        "_version": 2,        "_score": 0.2824934,        "_source": {          "name": "zhangsan",          "adress": "bei jing chao yang qu",          "age": 29,          "birthday": "1988-10-12",          "interests": "xi huan tingyinyue,changge,lvyou"       }     }   ] }}

match查询

  • math query指定分词器的存在,会对filed进行分词操作,然后再查询

    GET /lib1/user/_search
    {
     "query": {
       "match": {
         "name": "zhaoliuwu"
      }
    }
    }
    # 执行结果
    {
     "took": 2,
     "timed_out": false,
     "_shards": {
       "total": 5,
       "successful": 5,
       "failed": 0
    },
     "hits": {
       "total": 1,
       "max_score": 0.2876821,
       "hits": [
        {
           "_index": "lib1",
           "_type": "user",
           "_id": "1",
           "_score": 0.2876821,
           "_source": {
             "name": "zhaoliuwu",
             "adress": "hei long jiang sheng tie ling shi",
             "age": 49,
             "birthday": "1970-10-12",
             "interests": "xi huan hejiu,duanlian,lvyou"
          }
        }
      ]
    }
    }

    # 查询
    GET /lib1/user/_search
    {
     "query": {
       "match": {
         "name": "zhaoliuwu zhaoming"
      }
    }
    }
    # 执行结果
    {
     "took": 4,
     "timed_out": false,
     "_shards": {
       "total": 5,
       "successful": 5,
       "failed": 0
    },
     "hits": {
       "total": 2,
       "max_score": 0.80259144,
       "hits": [
        {
           "_index": "lib1",
           "_type": "user",
           "_id": "2",
           "_score": 0.80259144,
           "_source": {
             "name": "zhaoming",
             "adress": "bei ling dian qu qing he zhen",
             "age": 20,
             "birthday": "1998-10-12",
             "interests": "xi huan hejiu,duanlian,changge"
          }
        },
        {
           "_index": "lib1",
           "_type": "user",
           "_id": "1",
           "_score": 0.2876821,
           "_source": {
             "name": "zhaoliuwu",
             "adress": "hei long jiang sheng tie ling shi",
             "age": 49,
             "birthday": "1970-10-12",          "interests": "xi huan hejiu,duanlian,lvyou"       }     }   ] }}
  • match_all:查询所有文档

    GET /lib1/user/_search
    {
     "query": {
       "match_all": {}
    }
    }
  • multi_match:指定多个字段

    GET /lib1/user/_search
    {
     "query": {
       "multi_match": {
         "query": "changge",
         "fields": ["interests","name"]
      }
    }
    }
  • match_phrase:短语匹配查询

  • ElasticSearch引擎首先分析查询字符串,从分析后的文本中构建短语查询,这意味着必须匹配短语中的所有分词,并且保证各个分词的相对位置不变

    GET /lib1/user/_search
    {
     "query": {
       "match_phrase": {
         "interests": "duanlian,changge"
      }
    }
    }
    # 执行结果
    {
     "took": 12,
     "timed_out": false,
     "_shards": {
       "total": 5,
       "successful": 5,
       "failed": 0
    },
     "hits": {
       "total": 1,
       "max_score": 1.5467954,
       "hits": [
        {
           "_index": "lib1",
           "_type": "user",
           "_id": "2",
           "_score": 1.5467954,
           "_source": {
             "name": "zhaoming",
             "adress": "bei ling dian qu qing he zhen",
             "age": 20,
             "birthday": "1998-10-12",
             "interests": "xi huan hejiu,duanlian,changge"
          }
        }
      ]
    }
    }
  • 指定查询字段

    # 指定查询字段
    GET /lib1/user/_search
    {
     "_source": {
       "includes": ["name","adress"]
    },
     "query": {
       "match_all": {}
    }
    }
    # 排除查询字段
    GET /lib1/user/_search
    {
     "_source": {
       "excludes": ["name","adress"]
    },
     "query": {
       "match_all": {}
    }
    }
    # 通配符匹配查询字段
    GET /lib1/user/_search
    {
     "_source": {
       "includes":"adr*",
       "excludes": ["name","bir*"]
    },
     "query": {
       "match_all": {}
    }
    }
    # 执行结果
    {
     "took": 8,
     "timed_out": false,
     "_shards": {
       "total": 5,
       "successful": 5,
       "failed": 0
    },
     "hits": {
       "total": 5,
       "max_score": 1,
       "hits": [
        {
           "_index": "lib1",
           "_type": "user",
           "_id": "5",
           "_score": 1,
           "_source": {
             "adress": "bei jing chao yang qu"
          }
        },
        {
           "_index": "lib1",
           "_type": "user",
           "_id": "4",
           "_score": 1,
           "_source": {
             "adress": "北京海淀区清河"
          }
        },
        {
           "_index": "lib1",
           "_type": "user",
           "_id": "2",
           "_score": 1,
           "_source": {
             "adress": "bei ling dian qu qing he zhen"
          }
        },
        {
           "_index": "lib1",
           "_type": "user",
           "_id": "1",
           "_score": 1,
           "_source": {
             "adress": "hei long jiang sheng tie ling shi"
          }
        },
        {
           "_index": "lib1",
           "_type": "user",
           "_id": "3",
           "_score": 1,        "_source": {          "adress": "北京海淀区清河"       }     }   ] }}

排序

  • 使用sort实现排序:desc降序,asc升序

    GET /lib1/user/_search
    {
     "query": {
       "match_all": {}
    },
     "sort": [
      {
         "age": {
           "order": "desc"
        }
      }
    ]
    }
    GET /lib1/user/_search
    {
     "query": {
       "match_all": {}
    },
     "sort": [
      {
         "age": {
           "order": "asc"
        }
      }
    ]
    }

前缀匹配

GET /lib1/user/_search
{
 "query": {
   "match_phrase_prefix": {
     "name": {
       "query": "zhao"
    }
  }
}
}

范围查询

# []
GET /lib1/user/_search
{
 "query": {
   "range": {
     "birthday": {
       "from": "1990-10-10",
       "to": "2018-05-01"
    }
  }
}
}
# ()
GET /lib1/user/_search
{
 "query": {
   "range": {
     "birthday": {
       "from": "1995-10-12",
       "to": "1998-10-12",
       "include_lower":false,
       "include_upper":false
    }
  }
}
}
GET /lib1/user/_search
{
 "query": {
   "range": {
     "age": {
       "gte": 20,
       "lte": 28
    }
  }
}
}

wildcard查询

  • 允许使用通配符*和?来进行查询

    • *代表0个或多个字符

    • ?代表任意一个字符

    GET /lib1/user/_search
    {
     "query": {
       "wildcard": {
         "name": {
           "value": "li?i"
        }
      }
    }
    }
    GET /lib1/user/_search
    {
     "query": {
       "wildcard": {
         "name": "zhao*"
      }
    }
    }

fuzzy实现模糊查询

  • value:查询的关键字

  • boost:查询的权值,默认值是1.0

  • min_similarity:设置匹配的最小相似度,默认值是0.5,对于字符串,取值为0-1(包括0和1);对于数值,取值可能大于1;对于日期型取值为1d,1m等。

  • prefix_length:指名区分词项的共同前缀长度,默认是0

  • max_expansion:查询中的词项可以扩展的数目,默认可以无限大

    # 查询
    GET /lib1/user/_search
    {
     "query": {
       "fuzzy": {
         "name":"zhliuwu"
      }
    }
    }
    # 查询结果
    {
     "took": 5,
     "timed_out": false,
     "_shards": {
       "total": 5,
       "successful": 5,
       "failed": 0
    },
     "hits": {
       "total": 1,
       "max_score": 0.2054872,
       "hits": [
        {
           "_index": "lib1",
           "_type": "user",
           "_id": "1",
           "_score": 0.2054872,
           "_source": {
             "name": "zhaoliuwu",
             "adress": "hei long jiang sheng tie ling shi",
             "age": 49,
             "birthday": "1970-10-12",
             "interests": "xi huan hejiu,duanlian,lvyou"
          }
        }
      ]
    }
    }

    # 查询
    GET /lib1/user/_search
    {
     "query": {
       "fuzzy": {
         "interests": {
           "value": "chagge"
        }
      }
    }
    , "highlight": {
       "fields": {
         "interests": {}
      }
    }
    }
    # 执行结果
    {
     "took": 43,
     "timed_out": false,
     "_shards": {
       "total": 5,
       "successful": 5,
       "failed": 0
    },
     "hits": {
       "total": 2,
       "max_score": 0.64449805,
       "hits": [
        {
           "_index": "lib1",
           "_type": "user",
           "_id": "2",
           "_score": 0.64449805,
           "_source": {
             "name": "zhaoming",
             "adress": "bei ling dian qu qing he zhen",
             "age": 20,
             "birthday": "1998-10-12",
             "interests": "xi huan hejiu,duanlian,changge"
          },
           "highlight": {
             "interests": [
               "xi huan hejiu,duanlian,<em>changge</em>"
            ]
          }
        },
        {
           "_index": "lib1",
           "_type": "user",        "_id": "5",        "_score": 0.23541118,        "_source": {          "name": "zhangsan",          "adress": "bei jing chao yang qu",          "age": 29,          "birthday": "1988-10-12",          "interests": "xi huan tingyinyue,changge,lvyou"       },        "highlight": {          "interests": [            "xi huan tingyinyue,<em>changge</em>,lvyou"         ]       }     }   ] }}

高亮搜索结果

GET /lib1/user/_search
{
 "query": {
   "match": {
     "interests": "changge"
  }
},
 "highlight": {
   "fields": {"interests": {}}
}
}
# 查询结果
{
 "took": 6,
 "timed_out": false,
 "_shards": {
   "total": 5,
   "successful": 5,
   "failed": 0
},
 "hits": {
   "total": 2,
   "max_score": 0.7733977,
   "hits": [
    {
       "_index": "lib1",
       "_type": "user",
       "_id": "2",
       "_score": 0.7733977,
       "_source": {
         "name": "zhaoming",
         "adress": "bei ling dian qu qing he zhen",
         "age": 20,
         "birthday": "1998-10-12",
         "interests": "xi huan hejiu,duanlian,changge"
      },
       "highlight": {
         "interests": [
           "xi huan hejiu,duanlian,<em>changge</em>"
        ]
      }
    },
    {
       "_index": "lib1",
       "_type": "user",
       "_id": "5",
       "_score": 0.2824934,
       "_source": {
         "name": "zhangsan",
         "adress": "bei jing chao yang qu",
         "age": 29,
         "birthday": "1988-10-12",
         "interests": "xi huan tingyinyue,changge,lvyou"
      },
       "highlight": {
         "interests": [
           "xi huan tingyinyue,<em>changge</em>,lvyou"
        ]
      }
    }
  ]
}
}
posted on 2019-03-03 15:12  0x153_小波  阅读(489)  评论(0编辑  收藏  举报