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": "
    数据库"
                        }
                    }
                ]
            }
        }
    }

  • 相关阅读:
    Hadoop学习之安装HDFS
    常见的6种数据结构
    maven 编译出错 Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.5:clean
    jquery解决js对象、数组赋值时的引用传递
    405 method not allowed(方法不被允许)
    身份证件号 正确性检查方法
    svn 提交信息模板
    idea 使用说明
    java-System类
    java-Integer 类
  • 原文地址:https://www.cnblogs.com/TianFang/p/11330230.html
Copyright © 2011-2022 走看看