天天看點

Elasticsearch match查詢全文檢索(分詞查詢)

Elasticsearch 查詢分類大緻分為全文查詢、詞項查詢、複合查詢、嵌套查詢、地理位置查詢、特殊查詢。

全文查詢

比對查詢match

match和term的差別是,match查詢的時候,elasticsearch會根據你給定的字段提供合适的分析器,而term查詢不會有分析器分析的過程,match查詢相當于模糊比對,隻包含其中一部分關鍵詞就行同時還要注意match系列比對時,datatype要設定為text,否則不會開啟分詞。

match_all 查詢

查詢比對所有的文檔

# 查詢比對所有的文檔
GET /index_name/_search
{
    "query":{
        "match_all":{

        }
    }
}

# 輸出結果
{
    "took":0,
    "timed_out":false,
    "_shards":{
        "total":2,
        "successful":2,
        "skipped":0,
        "failed":0
    },
    "hits":{
        "total":{
            "value":5,
            "relation":"eq"
        },
        "max_score":1,
        "hits":[
            {
                "_index":"index_name",
                "_type":"_doc",
                "_id":"1",
                "_score":1,
                "_source":{
                    "id":1001,
                    "name":"張三",
                    "age":12,
                    "desc":"我的自我描述",
                    "birthday":"2020-02-02"
                }
            },
            ...
            {
                "_index":"index_name",
                "_type":"_doc",
                "_id":"Rmc5rYYBhncLYm9c_fxA",
                "_score":1,
                "_source":{
                    "id":1005,
                    "name":"王五",
                    "age":14,
                    "desc":"超人的平凡人生",
                    "birthday":"2023-02-04"
                }
            }
        ]
    }
}


           

match 查詢

支援全文檢索和精确查詢,取決于字段是否支援全文檢索,字段類型為text支援全文檢索。當一個字段需要用于全文搜尋(會被分詞), 比如産品名稱、産品描述資訊,就應該使用text類型。

當一個字段需要按照精确值進行過濾、排序、聚合等操作時,就應該使用keyword類型。

全文檢索

# 全文檢索,desc字段類型是text,支援全文檢索,全文檢索會将查詢的字元串先進行分詞,會将desc字段值包
含[我,的,我的]的文檔都查詢出來
GET /index_name/_search
{
    "query":{
        "match":{
            "desc":"我的"
        }
    }
}

# 輸出結果
{
    "took":1,
    "timed_out":false,
    "_shards":{
        "total":2,
        "successful":2,
        "skipped":0,
        "failed":0
    },
    "hits":{
        "total":{
            "value":4,
            "relation":"eq"
        },
        "max_score":0.8084657,
        "hits":[
            {
                "_index":"index_name",
                "_type":"_doc",
                "_id":"1",
                "_score":0.8084657,
                "_source":{
                    "id":1001,
                    "name":"張三",
                    "age":12,
                    "desc":"我的自我描述",
                    "birthday":"2020-02-02"
                }
            },
            {
                "_index":"index_name",
                "_type":"_doc",
                "_id":"G2cyrYYBhncLYm9cmrSc",
                "_score":0.8084657,
                "_source":{
                    "id":1003,
                    "name":"王五",
                    "age":14,
                    "desc":"我的自我述3",
                    "birthday":"2023-02-03"
                }
            },
            {
                "_index":"index_name",
                "_type":"_doc",
                "_id":"KWcyrYYBhncLYm9cWbGB",
                "_score":0.7622653,
                "_source":{
                    "id":1002,
                    "name":"李四",
                    "age":13,
                    "desc":"我的自我描2述",
                    "birthday":"2023-02-03"
                }
            },
            {
                "_index":"index_name",
                "_type":"_doc",
                "_id":"Rmc5rYYBhncLYm9c_fxA",
                "_score":0.2876821,
                "_source":{
                    "id":1005,
                    "name":"王五",
                    "age":14,
                    "desc":"超人的平凡人生",
                    "birthday":"2023-02-04"
                }
            }
        ]
    }
}           

繼續閱讀