es-花式查询

  • 一.复杂操作搜索select(排序、分页、高亮、模糊查询、精准查询!)
  • 1.json格式查询
  • 2.结果的过滤:只搜索name和age
  • 3.sort排序
  • 4.分页查询
  • 5.布尔值查询
  • 6.fillter过滤
  • 二、关于分词
  • 三、高亮查询


一.复杂操作搜索select(排序、分页、高亮、模糊查询、精准查询!)

1.json格式查询

es sortbuilder 排序 es排序查询_搜索

GET test2/user/_search
{
  "query": {
    "match": {
      "name": "亢学强"
    }
  }
}

es sortbuilder 排序 es排序查询_搜索_02


我又添加了一条数据:

es sortbuilder 排序 es排序查询_高亮_03


继续查询:

es sortbuilder 排序 es排序查询_Java_04

2.结果的过滤:只搜索name和age
GET test2/user/_search
{
  "query": {
    "match": {
      "name": "亢学强"
    }
  },
   "_source": ["name","age"]
}

es sortbuilder 排序 es排序查询_Java_05

3.sort排序

sort根据年龄降序排序desc

GET test2/user/_search
{
  "query": {
    "match": {
      "name": "亢学强"
    }
  },
   "_source": ["name","age"]
  , "sort": [
    {
      "age": {
        "order": "desc"
      }
    }
  ]
}

es sortbuilder 排序 es排序查询_高亮_06


sort根据年龄升序排序asc

GET test2/user/_search
{
  "query": {
    "match": {
      "name": "亢学强"
    }
  },
   "_source": ["name","age"]
  , "sort": [
    {
      "age": {
        "order": "asc"
      }
    }
  ]
}

es sortbuilder 排序 es排序查询_高亮_07

4.分页查询
GET test2/user/_search
{
  "query": {
    "match": {
      "name": "亢学强"
    }
  },
   "_source": ["name","age"]
  , "sort": [
    {
      "age": {
        "order": "asc"
      }
    }
  ],
  "from": 0,
  "size": 1
}

es sortbuilder 排序 es排序查询_搜索_08

5.布尔值查询

must(and),所有的条件都要符合 where id =1 and name=xxxx

GET test2/user/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "name": "亢学强"
          }
        },
        {
          "match": {
            "age": "18"
          }
        }
      ]
     
    }
  }
}

es sortbuilder 排序 es排序查询_Java_09


should(or),所有的条件都要符合 where id =1 or name=xxxx 只要符合其中一个条件就回查询出来

GET test2/user/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "name": "亢学强"
          }
        },
        {
          "match": {
            "age": "18"
          }
        }
      ]
    }
  }
}

es sortbuilder 排序 es排序查询_es sortbuilder 排序_10


must_not不是

es sortbuilder 排序 es排序查询_搜索_11

6.fillter过滤

es sortbuilder 排序 es排序查询_高亮_12

二、关于分词

精确查询!
term查询是直接通过倒排索引制定的词条进行精确查找的

  • term,直接查询精确的
  • match,会使用分词解析!(先分析文档,然后再通过分析的文档进行查询)

先建立索引:

PUT testdb 
{
  "mappings": {
    "properties": {
      "name": {
        "type": "text"
      },
      "desc":{
        "type": "keyword"
      }
    }
  }
}

添加数据:

PUT testdb/_doc/1
{
  "name": "狂神说Java name",
  "desc": "狂神说Java desc"
}
PUT testdb/_doc/2
{
  "name": "狂神说Java name",
  "desc": "狂神说Java 2"
}

查看索引的映射规则:

es sortbuilder 排序 es排序查询_搜索_13


keyword:

es sortbuilder 排序 es排序查询_搜索_14


standard

es sortbuilder 排序 es排序查询_搜索_15


name的type是text,只要包含查询的自就会查到:

es sortbuilder 排序 es排序查询_es sortbuilder 排序_16


desc是keyword类型,是个整体只能精确查找,不会经过分词器 解析:

es sortbuilder 排序 es排序查询_搜索_17


精确查询多个值:

GET testdb/_search
{
  "query": {
  "bool": {
    "should": [
      {
        "term": {
            "t1": "22"
        }
      },
      {
        "term": {
            "t1": "33"
        }
      }
    ]
  }
  }
}

es sortbuilder 排序 es排序查询_es sortbuilder 排序_18

三、高亮查询

高亮查询就是查询出的字体标红(突出显示出来)

例如京东:搜索“咖啡”

es sortbuilder 排序 es排序查询_es sortbuilder 排序_19


练习:

GET testdb/_search
{
  "query": {
    "match": {
      "name": "狂神"
    }
  },
  "highlight": {
    "fields": {
      "name": {}
    }
  }
}

发现下图狂神都带了标签<em>狂</em><em>神</em>

es sortbuilder 排序 es排序查询_搜索_20


自定义高亮:

GET testdb/_search
{
  "query": {
    "match": {
      "name": "狂神"
    }
  },
  "highlight": {
    "pre_tags": "<p class='key' style='color:red'>", 
    "post_tags": "</p", 
    "fields": {
      "name": {}
    }
  }
}

es sortbuilder 排序 es排序查询_Java_21