zoukankan      html  css  js  c++  java
  • ElasticSearch简介(二)——简单查询

    返回所有记录

    使用 GET 方法,直接请求/Index/_search,就会返回所有记录。

    GET /accounts/_search
    {
        "took": 683,
        "timed_out": false,
        "_shards": {
            "total": 1,
            "successful": 1,
            "skipped": 0,
            "failed": 0
        },
        "hits": {
            "total": {
                "value": 1,
                "relation": "eq"
            },
            "max_score": 1.0,
            "hits": [
                {
                    "_index": "accounts",
                    "_type": "person",
                    "_id": "1",
                    "_score": 1.0,
                    "_source": {
                        "user": "
    张三",
                        "title": "
    工程师",
                        "desc": "
    数据库管理,软件开发"
                    }
                }
            ]
        }
    }

    上面代码中,返回结果的 took字段表示该操作的耗时(单位为毫秒),timed_out字段表示是否超时,hits字段表示命中的记录,里面子字段的含义如下。

    • total:返回记录数,本例是2条。
    • max_score:最高的匹配程度,本例是1.0。
    • hits:返回的记录组成的数组。

    返回的记录中,每条记录都有一个_score字段,表示匹配的程序,默认是按照这个字段降序排列。

      

    全文搜索

    Elastic 的查询非常特别,使用自己的查询语法,要求 GET 请求带有数据体。

    GET /accounts/_search
    {
        "query": {
            "match": {
                "desc": "
    软件"
            }
        }
    }

    上面代码使用 Match 查询,指定的匹配条件是desc字段里面包含"软件"这个词。返回结果如下。

    {
        "took": 1,
        "timed_out": false,
        "_shards": {
            "total": 1,
            "successful": 1,
            "skipped": 0,
            "failed": 0
        },
        "hits": {
            "total": {
                "value": 1,
                "relation": "eq"
            },
            "max_score": 0.5753642,
            "hits": [
                {
                    "_index": "accounts",
                    "_type": "person",
                    "_id": "1",
                    "_score": 0.5753642,
                    "_source": {
                        "user": "
    张三
    ",
                        "title": "
    工程师",
                        "desc": "
    数据库管理,软件开发"
                    }
                }
            ]
        }
    }

    精确匹配

    全面的match是模糊匹配的,如果我们需要精确匹配,可以使用match_phrase来实现。具体见后面的示例。

    分页

    Elastic 默认一次返回10条结果,可以通过size字段改变这个设置。

    GET /person/_search
    {
        "query": {
            "match": {
                "desc": "
    管理
    "
            }
        },
        "size": 1
    }

    上面代码指定,每次只返回一条结果。

    还可以通过from字段,指定位移。

    GET /accounts/_search
    {
        "query": {
            "match": {
                "desc": "
    管理
    "
            }
        },
        "from": 1,
        "size": 1
    }

    上面代码指定,从位置1开始(默认是从位置0开始),只返回一条结果。

      

    逻辑运算

    如果有多个搜索关键字, Elastic 认为它们是or关系。

    GET /accounts/_search
    {
        "query": {
            "match": {
                "desc": "
    软件系统"
            }
        },
        "from": 0,
        "size": 1
    }

    上面代码搜索的是软件 or 系统。

    如果要执行多个关键词的and搜索,必须使用布尔查询

    GET /accounts/_search
    {
        "query": {
            "bool": {
                "must": [
                    {
                        "match_phrase": {
                            "user": "
    张三"
                        }
                    },
                    {
                        "match": {
                            "desc": "
    数据库"
                        }
                    }
                ]
            }
        }
    }

  • 相关阅读:
    LeetCode Missing Number (简单题)
    LeetCode Valid Anagram (简单题)
    LeetCode Single Number III (xor)
    LeetCode Best Time to Buy and Sell Stock II (简单题)
    LeetCode Move Zeroes (简单题)
    LeetCode Add Digits (规律题)
    DependencyProperty深入浅出
    SQL Server存储机制二
    WPF自定义RoutedEvent事件示例代码
    ViewModel命令ICommand对象定义
  • 原文地址:https://www.cnblogs.com/TianFang/p/11330230.html
Copyright © 2011-2022 走看看