zoukankan      html  css  js  c++  java
  • 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"
            ]
          }
        }
      ]
    }
    }
  • 相关阅读:
    HttpClient使用
    十九、springboot使用@ControllerAdvice(二)之深入理解
    如何同步删除svn管理的package包目录
    在使用FastJson开发遇到的的坑
    解决tomcat端口被占用:Port 8005 required by Tomcat v7.0 Server at localhost is already in use
    SpringBoot使用Mybatis-Generator
    SpringCloud Gateway入门
    使用Nginx部署静态网站
    SpringBoot使用Jsp
    SpringBoot应用War包形式部署到外部Tomcat
  • 原文地址:https://www.cnblogs.com/zxbdboke/p/10465771.html
Copyright © 2011-2022 走看看