ES简单搜索

准备的数据

{
    "mappings":{
        "properties":{
            "name":{
                "type":"text"
            },
            "team_name":{
                "type":"text"
            },
            "zhiwei":{
                "type":"text"
            },
            "gongzuotime":{
                "type":"long"
            },
            "id":{
                "type":"keyword"
            }
        }
    }
}

===

    "name": "小小",
    "team_name": "草原",
    "zhiwei": "美工",
    "gongzuotime": 10,
    "id": "2"

===

    "name": "木子",
    "team_name": "河流",
    "zhiwei": "程序",
    "gongzuotime": 5,
    "id": "34"

===

    "name": "小白",
    "team_name": "青青",
    "zhiwei": "运维",
    "gongzuotime": 2,
    "id": "78"

term(词条查询)和full text(全文查询)

  • 词条查询不会分析查询的条件,只有当词条和查询的字符串完全匹配时,才匹配搜索
  • 全文查询:引擎会先分析查询的字符串,将其拆分成多个分词,只要已分析的字段中包含词条,就会匹配查询,没有包含分词,就没有不会查询的结果

term查询

单条term查点询

关键字查询

localhost:9200/people/_search

请求体


{
    "query":{
        "term":{
            "id":34
        }
    }
}

这term是关键字查询,term里面的字段是写的mapping里面的字段

多条term查点询
localhost:9200/people/_search

请求体


{
    "query":{
        "terms":{
            "id":[
                "2",
                "34"
            ]
        }
    }
}

这里面的term更换成了terms,需要注意下,jerse_nog更换成了数组的方式

返回结果的信息
{
    "took": 6, //响应花费的时间
    "timed_out": false, //是否超时
    "_shards": { //分片的信息
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": { //命中
        "total": { //查询的总数
            "value": 2,
            "relation": "eq"
        },
        "max_score": 1.0, //最大的分数,每一次的查询都会打一个分
        "hits": [    //返回的线结果是在分数最大到分数最小排的
            {
                "_index": "people",
                "_type": "_doc",
                "_id": "1",
                "_score": 1.0,
                "_source": {
                    "name": "木子",
                    "team_name": "河流",
                    "zhiwei": "程序",
                    "gongzuotime": 5,
                    "id": "34"
                }
            },
            {
                "_index": "people",
                "_type": "_doc",
                "_id": "2",
                "_score": 1.0,
                "_source": {
                    "name": "小小",
                    "team_name": "草原",
                    "zhiwei": "美工",
                    "gongzuotime": 10,
                    "id": "2"
                }
            }
        ]
    }
}

full text(全文查询)

查询全部的文档
localhost:9200/people/_search

请求体

{
    "query":{
        "match_all":{}  //注这种方式只可以显示前10条数据
    }
}

如果要查询全部的可以通过分页来处理

{
    "query":{
        "match_all":{}
    },
    "from":0, //从第几个开始查
    "size":2 //查多少个 我这里指定的是2,你可以更换成自已的
}

match查询(使用的量候注意,这个字段的类型一定是一个text类型)

localhost:9200/people/_search

请求体

{
    "query":{
        "match":{
            "name":"小小"
        }
    }
}

这个时候,查询出来的数据是两条,但是我只有插入一个name是小小的,为什么会出现两条记录呢?

因为这个是一个全文的查询,会先把小小这两个字分成,只要有包含这个字的就会被查询出来.

多个查询

localhost:9200/people/_search

请求体


{
    "query":{
        "multi_match":{
            "query":"小",
            "fields":["name","alignType"]
        }
    }
}

查询在name和alignType中有字的查询出来

精确的查询(类似词条检询)
localhost:9200/people/_search

请求体

{
    "query":{
        "match_phrase":{
            "name":"小小"
        }
    }
}

当这里查询出来的只有一条数据,这个是一个精确的查询,比较类似词条查询吧

前缀查询
localhost:9200/people/_search

请求体

{
    "query":{
        "match_phrase_prefix":{
            "name":"小"
        }
    }
}

这里查询出来的是在name字段中第一个字是

Last modification:November 1st, 2019 at 01:03 am
如果觉得我的文章对你有用,请随意赞赏

Leave a Comment