【编程】ElasticSearch更多的内容

入门只是第一步,想要成功删库跑路,还有很长的路要走,学而时习之。这篇用于记录入门之后遇到的更多状况,待更新。

大家也可以点这里,查看虽然过时,但也有一定参考价值的Elasticsearch: 权威指南(中文版)

当然,英文好的小伙伴还是翻看和自己所使用的ElasticSearch相同的英文版本,进去之后找到自己关注的目录点other version。

顺便说一句我的示例代码是基于6.4.2的,有些部分可能有差别。

1、嵌套对象查询nested/mapping

假如咱们要存的数据有更复杂的嵌套关系,比如对象中的一个属性是一个新的对象数组:

简历中的语言能力是一个对象组成的数组:

POST my_index/resume/1

{

          "language" : [

                    {"class":"eng", "rank": 100},

                    {"class":"jap", "rank": 60},

                    {"class":"spa", "rank": 70}

          ],

          "name": "zhangsan"

}

试图搜索英文70分的人,却会搜出英文100分、日文70分的文档。原因:戳这里

GET my_index/resume/_search

{

          "query": {

                    "bool": {

                              "must": [

                                        {

                                                  "term": {

                                                            "language.class": {

                                                                      "value": "eng"

                                                            }

                                                  }

                                        },{

                                                  "term": {

                                                            "language.rank": {

                                                                      "value": "70"

                                                            }

                                                  }

                                        }

                              ]

                    }

          }

}

要想实现这样复杂结构的搜索,需要使用嵌套结构,先用mappings/nested来定义这个结构:

GET my_index/_mapping/resume

DELETE my_index

PUT my_index

{

          "mappings": {

                    "resume": {

                              "properties": {

                                        "language": {

                                                  "type": "nested",

                                                  "properties": {

                                                            "class": {"type": "text"},

                                                            "rank": {"type": "integer"}

                                                  }

                                        },

                                        "name":{

                                                  "type": "text"

                                        }

                              }

                    }

          }

}

再用nested关键字来搜索:

GET my_index/resume/_search

{

          "query": {

                    "nested": {

                              "path": "language",

                              "query": {

                                        "bool": {

                                                  "must": [

                                                            {

                                                                      "term": {

                                                                                "language.class": {

                                                                                          "value": "eng"

                                                                                }

                                                                      }

                                                            },

                                                            {

                                                                      "term": {

                                                                                "language.rank": {

                                                                                          "value": 100

                                                                                }

                                                                      }

                                                            }

                                                  ]

                                        }

                              }

                    }

          }

}

二、ElasticSearch深分页scroll和浅分页from-size

简介:

from-size,先查出全量然后从全量的from位置开始,取出size数量的文档。scroll,先通过_search/scroll命令查出卷标,然后通过卷标找出对应的文档集合。

https://www.cnblogs.com/xing901022/archive/2016/03/16/5284902.html(效率比较、写法比较)

https://www.jianshu.com/p/14aa8b09c789(scroll原理详解、参数意义)


上篇:【编程】在Kibana的帮助下进一步学习ElasticSearch

猜你喜欢

转载自blog.csdn.net/ssybc/article/details/83313038