es-花式查询
- 一.复杂操作搜索select(排序、分页、高亮、模糊查询、精准查询!)
- 1.json格式查询
- 2.结果的过滤:只搜索name和age
- 3.sort排序
- 4.分页查询
- 5.布尔值查询
- 6.fillter过滤
- 二、关于分词
- 三、高亮查询
一.复杂操作搜索select(排序、分页、高亮、模糊查询、精准查询!)
1.json格式查询
GET test2/user/_search
{
"query": {
"match": {
"name": "亢学强"
}
}
}
我又添加了一条数据:
继续查询:
2.结果的过滤:只搜索name和age
GET test2/user/_search
{
"query": {
"match": {
"name": "亢学强"
}
},
"_source": ["name","age"]
}
3.sort排序
sort
根据年龄降序排序desc
:
GET test2/user/_search
{
"query": {
"match": {
"name": "亢学强"
}
},
"_source": ["name","age"]
, "sort": [
{
"age": {
"order": "desc"
}
}
]
}
sort
根据年龄升序排序asc
GET test2/user/_search
{
"query": {
"match": {
"name": "亢学强"
}
},
"_source": ["name","age"]
, "sort": [
{
"age": {
"order": "asc"
}
}
]
}
4.分页查询
GET test2/user/_search
{
"query": {
"match": {
"name": "亢学强"
}
},
"_source": ["name","age"]
, "sort": [
{
"age": {
"order": "asc"
}
}
],
"from": 0,
"size": 1
}
5.布尔值查询
must(and),所有的条件都要符合 where id =1 and name=xxxx
GET test2/user/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"name": "亢学强"
}
},
{
"match": {
"age": "18"
}
}
]
}
}
}
should(or),所有的条件都要符合 where id =1 or name=xxxx 只要符合其中一个条件就回查询出来
GET test2/user/_search
{
"query": {
"bool": {
"should": [
{
"match": {
"name": "亢学强"
}
},
{
"match": {
"age": "18"
}
}
]
}
}
}
must_not不是
6.fillter过滤
二、关于分词
精确查询!
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"
}
查看索引的映射规则:
keyword
:
standard
name的type是text,只要包含查询的自就会查到:
desc是keyword类型,是个整体只能精确查找,不会经过分词器 解析:
精确查询多个值:
GET testdb/_search
{
"query": {
"bool": {
"should": [
{
"term": {
"t1": "22"
}
},
{
"term": {
"t1": "33"
}
}
]
}
}
}
三、高亮查询
高亮查询就是查询出的字体标红(突出显示出来)
例如京东:搜索“咖啡”
练习:
GET testdb/_search
{
"query": {
"match": {
"name": "狂神"
}
},
"highlight": {
"fields": {
"name": {}
}
}
}
发现下图狂神都带了标签<em>狂</em><em>神</em>
自定义高亮:
GET testdb/_search
{
"query": {
"match": {
"name": "狂神"
}
},
"highlight": {
"pre_tags": "<p class='key' style='color:red'>",
"post_tags": "</p",
"fields": {
"name": {}
}
}
}