GET /yscxy/user/_search?q=name:"野生程序员2"
分值越高,也就意味着匹配度越高!也就是权重
GET /yscxy/user/_search
{
"query":{
"match": {
"name": "野生小子"
}
},
"_source":["name","tags"] #自定义查询参数
}
GET /yscxy/user/_search
{
"query":{
"match": {
"name": "野生小子"
}
},
"_source":["name","age"],
"sort":[ #通过哪个字段进行排序
{
"age":"asc"
}
]
}
GET /yscxy/user/_search
{
"query":{
"match": {
"name": "野生小子"
}
},
"_source":["name","age"],
"sort":[
{
"age":"asc"
}
],
"from":0, #从第几条开始
"size":1 #返回多少条数据
}
当然数据的下标也是从0开始的
mast命令,类似mysql中的and
GET /yscxy/user/_search
{
"query":{
"bool":{
"must": [
{
"match": {
"name": "野生程序员"
}
},
{
"match": {
"age": 3
}
}
]
}
}
}
上面也就是多条件查询!
should相当于or,两个条件满足一个就好了
GET /yscxy/user/_search
{
"query":{
"bool":{
"should": [
{
"match": {
"name": "野生程序员"
}
},
{
"match": {
"age": 3
}
}
]
}
}
}
must_not 也就是非 相当于not
GET /yscxy/user/_search
{
"query":{
"bool":{
"must_not": [
{
"match": {
"age": 23
}
}
]
}
}
}
在查询的时候可以,可以使用filter进行数据过滤
GET /yscxy/user/_search
{
"query":{
"bool":{
"must": [
{
"match": {
"name": "野生"
}
}
],
"filter": [
{
"range":{
"age":{
"gte":20
}
}
}
]
}
}
}
当然也可以这样查询
GET /yscxy/user/_search
{
"query":{
"match": {
"tags": "男 旅游" #多个条件直接用空格隔离开
}
}
}
term也就是指定词语进行精确查询,这样性能,效率更加快速
term直接查询精确的
match会使用分词器进行解析(先分析,再通过分析的文档进行查询,利用倒排索引)
两个类型,一个是text,另一个是keyword ,keyword不会被分词器解析的,而text会
下面我们创建文档进行测试
PUT testbdb
{
"mappings": {
"properties": {
"name":{
"type": "text"
},
"desc":{
"type": "keyword"
}
}
}
}
PUT testbdb/_doc/1
{
"name":"野生程序",
"desc":"java desc"
}
PUT testbdb/_doc/2
{
"name":"野生程序",
"desc":"java desc2"
}
GET testbdb/_search
{
"query": {
"term": {
"desc": "java desc"
}
}
}
可以看到,类型为keeyword 的字段并没有被分词器进行解析
GET /yscxy/user/_search
{
"query":{
"match": {
"name": "野生"
}
},
"highlight":{
"fields": {
"name": {}
}
}
}
查询结果
GET /yscxy/user/_search
{
"query":{
"match": {
"name": "野生"
}
},
"highlight":{
"pre_tags": "<p class-'key' style-'color:red'> ",
"post_tags": "</p>",
"fields": {
"name": {}
}
}
}