zoukankan      html  css  js  c++  java
  • ElasticSearch7.10的查询数据-简单查询

    ElasticSearch7.10的查询数据-简单查询

    官网REST API
    https://www.elastic.co/guide/en/elasticsearch/client/java-rest/7.10/java-rest-high-getting-started.html

    官网client API
    https://www.elastic.co/guide/en/elasticsearch/client/java-rest/7.10/java-rest-high-getting-started.html

    由于是学习阶段,用REST API进行
    ElasticSearch测试用例:databooks.json。仅限学习。
    https://gitee.com/springboot-search/SearchEngine.git

    match query

    1. 简单搜索

    这个查询,对于搜索字进行分词,然后查询那个匹配的词项,文档就会被索引到。

    GET 192.168.246.130:9200/books/_search
    {
       "query":{
           "match":{
               "name":"算法导论"
           }
       }
    }
    

    这个有243个。那么它是怎么查询的呢? 首先对算法导论分词:

    分词之后进行查询,在name中只要包含有这两个词组的都会返回文档,它们之间是 or 的关系。相当于:

    GET 192.168.246.130:9200/books/_search
    {
       "query":{
           "match":{
               "name":{
                   "query":"算法导论",
                   "operator":"or"
               }
           }
       }
    }
    

    2. AND

    在operator的位置设置为 and,就是要整体匹配所有字,才能得到文档。

    GET 192.168.246.130:9200/books/_search
    {
       "query":{
           "match":{
               "name":{
                   "query":"算法导论",
                   "operator":"and"
               }
           }
       }
    }
    

    这次就是查询算法导论这几个字一起查询,返回为0。

    {
        "took": 31,
        "timed_out": false,
        "_shards": {
            "total": 1,
            "successful": 1,
            "skipped": 0,
            "failed": 0
        },
        "hits": {
            "total": {
                "value": 0,
                "relation": "eq"
            },
            "max_score": null,
            "hits": []
        }
    }
    

    3. 设置最小匹配数

    可以设置 minimum_should_match 属性,决定文档显示,至少要匹配分词之后的几个字中的数量。如:

    {
       "query":{
           "match":{
               "name":{
                   "query":"算法导论",
                   "minimum_should_match":"3"
               }
           }
       }
    }
    

    显示结果至少 name 中包含3个字才行。显示为1个。

    {
        "took": 18,
        "timed_out": false,
        "_shards": {
            "total": 1,
            "successful": 1,
            "skipped": 0,
            "failed": 0
        },
        "hits": {
            "total": {
                "value": 1,
                "relation": "eq"
            },
            "max_score": 8.591468,
            "hits": [
                {
                    "_index": "books",
                    "_type": "_doc",
                    "_id": "795",
                    "_score": 8.591468,
                    "_source": {
                        "name": "科学思维的艺术科学思维方法论导论",
                        "publish": "科学出版社",
                        "type": "逻辑学",
                        "author": "",
                        "info": "当今世界,人类通过技术及其进步以越来越快的速度改造着世界和自身。然而,现代技术不是听凭人使用的简单工具,而是揭示存在、构造现实的人类技术生存方式。现代技术在给我们带来巨大物质成就的同时,也带来了社会文化、伦理道德、人类心理的危机和挑战。本书通过对技术价值的分析,提出了整合现代技术人文价值冲突的生态文化模式及实践整合的基本原则和方法。作者认为,现代技术既是解放的力量也是统治的力量,我们必须保持清醒的头脑和高度的警觉,必须将现代技术规范在人性化发展方向,探索出一条不同于西方发达国家的技术现代化道路。本书可供科技哲学及相关领域的研究者、教师和学生阅读,也适合对科学文化感兴趣的大众读者阅读。",
                        "price": 35
                    }
                }
            ]
        }
    }
    

    2. multi_match

    平时在使用中,对于几个字段都进行查询,没有明确表示field,这个就可以用在这种情况。

    {
       "query":{
           "multi_match":{
               "query":"算法导论",
               "fields":[
                   "name^3","publish","info"
               ],
               "type":"best_fields"
           }
       }
    }
    

    这个 multi_search的type定义为best_fields,对于这三个字段都进行搜索,安装_score的分数进行排序,并且对于 name^3 的文档分数
    进行3倍的加权。返回结果。

    3. prefix query

    根据字段,进行前缀查询。

    GET 192.168.246.130:9200/books/_search
    {
       "query":{
          "prefix":{
              "name":"农"
          }
       }
    }
    

    查询出的name都是以农开头的,若是没有用农开头,也会匹配这个字。

    {
        "took": 15,
        "timed_out": false,
        "_shards": {
            "total": 1,
            "successful": 1,
            "skipped": 0,
            "failed": 0
        },
        "hits": {
            "total": {
                "value": 2,
                "relation": "eq"
            },
            "max_score": 1.0,
            "hits": [
                {
                    "_index": "books",
                    "_type": "_doc",
                    "_id": "2",
                    "_score": 1.0,
                    "_source": {
                        "name": "测试商品",
                        "publish": "农村读物出版社",
                        "type": "小学通用",
                        "author": "",
                        "info": "",
                        "price": 5
                    }
                },
                {
                    "_index": "books",
                    "_type": "_doc",
                    "_id": "601",
                    "_score": 1.0,
                    "_source": {
                        "name": "小学生多功能挂图1+1:汉语拼音",
                        "publish": "农村读物出版社",
                        "type": "小学通用",
                        "author": "",
                        "info": "《小学生多功能挂图1+1:汉语拼音》这副挂图可以为孩子提供早期基础知识的初步、直观教育,有助于提高儿童智商和读写能力。提高儿童的兴趣,促进儿童学习进步等等。",
                        "price": 5
                    }
                }
            ]
        }
    }
    

    3. Term query

    根据词项进行精确的匹配,不会进行分词,是整个进行查询,所以需要精确的字段值。

    GET 192.168.246.130:9200/books/_search
    {
       "query":{
          "term":{
              "author":"老王"
          }
       }
    }
    

    结果一个都没有。老王不好找,我们直接找

    {
       "query":{
          "term":{
              "author":"王"
          }
       }
    }
    

    结果显示56条数据。

    弯弯月亮,只为美好的自己。
  • 相关阅读:
    CDN是什么?
    CSS实现隐藏滚动条同时又可以滚动
    顶部固定 页面内容部分可以滚动
    H5对话框水平垂直居中
    移动端调试神器(eruda)
    JAVA_OA管理系统(三)番外篇:Myeclipse导入Spring源码包
    Spring Framework Reference Documentation手册官网下载地址
    Spring Framework Reference Documentation手册官网下载地址
    JAVA_OA(六):SpringMVC登陆实例
    JAVA_OA(五)(番外篇):SpringMVC乱码解决(post,get)
  • 原文地址:https://www.cnblogs.com/Choleen/p/14141875.html
Copyright © 2011-2022 走看看