ElasticSearch(三)高级查询语法(DLS)

一、倒排索引的结构介绍

        1、单词词典:记录所有文档单词,单词到倒排列表的关系;

        2、倒排列表:记录了单词对应的文档id;

        3、倒排索引项:a 文档id b 词频 c 位置(单词在文本中的位置)d 偏移:单词开始结束位置;

二、mapping映射

mapping映射类似于数据库的字段类型

1、静态映射(手动创建直接指定)

put /索引名

{
    "mappings":{
        "properties":{
            "time":{
                "type":"date"
            },
            "name":{
                "type":"text",
                "fields":{
                    "keyword":{
                        "type":"keyword",
                        "ignore_above":256
                    }
                }
            }
        }
    }
}

2、动态映射

直接添加文档动态生成;

注意*mapping映射新增字段可以动态映射,mapping修改字段不支持;

(修改字段会导致倒排索引发生变化,可采用索引重建修改字段属性)

三、Dsl查询

es提供了一种强大的检索数据方式,这种检索方式称之为Query DSL,她是利用RestApi船体JSON格式请求体数据与es进行交互;

分页查询

GET /索引名/_search

{

        "query":{

                "match_all":{}        

        },

        "from":0,

        "size":1000

}

查询窗口限制值最大默认10000;可设置更大值,过多的数据加载到内存中影响性能(可采用scroll api更高效的请求大量数据集);

深分页scroll

GET /索引名称/_search?scroll=1m

{

        "query":{

                "match_all":{}        

        },

        "size":10

}

查询结果会返回游标id,根据id再次进行分页查询;

采用游标id查询

GET /_search/scroll

{

        "scroll":1m,

        "scroll_id":"FGJkksdoiuhernnkidfFJHEkjsudjask"

}

(注意*新增数据快照中没有,有新数据插入时会有精准度的问题)

条件查询

match

会对所查询的关键词进行分词,然后再按分词匹配查询

GET /索引名称/_search

{

        "query":{

                "match":{

                        "title":"java设计模式"

                }        

        },

        "size":10

}

 "operator":"and"   :表示分词后所有的分词都要有

GET /索引名称/_search

{

        "query":{

                "match":{

                        "title":{

                                "query":"java设计模式",

                                "operator":"and"   

                        }

                }        

        },

        "size":10

}

match_phrase

短语匹配,会将关键字进行分词且所有分词必须都包含,并且分词的顺序要是连续的(倒排索引项中的单词位置位置);如java设计模式分词成 java 设计模式 设计 模式 以下语句时查询不出的结果的 ;

GET /索引名/_search

{

        "query":{

                "match_phrase":{

                        "title":"java设计"

                }        

        },

        "size":10

}

"slop":1:位置间隔一个次也可以匹配 可查询出结果

GET /索引名/_search

{

        "query":{

                "match_phrase":{

                        "title":{

                        "query":"java设计",

                         "slop":1

                         }

                }        

        },

        "size":10

}

multi_match

多字段查询

GET /索引名称/_search

{

        "query":{

                "multi_match":{

                        "query":"java",

                        "fieids":[

                                "title":"java设计模式",

                                "name":"张三",

                        ]

                }        

        },

        "size":10

}

query_string

所有字段检索

GET /索引名/_search

{

        "query":{

                "query_string":{

                        "query":"java or 设计模式",

                  }        

        },

        "from":0,

        "size":1000

}

指定字段

GET /索引名/_search

{

        "query":{

                "query_string":{

                        "fields":["name","title"],

                        "query":"java OR 设计模式",

                  }        

        },

        "from":0,

        "size":1000

}

精准查询

term用来使用关键词查询,还可以用来查询没有被分词的数据类型;

GET /索引名称/_search

{

        "query":{

                "term":{

                        "title.keyword":"java设计模式"

                }        

        },

        "size":10

}

(*注意分词会将英文大写变为小写)可通过配置修改

term查询优化:使用filter忽略算分处理,提升查询性能;

filter大量的查询可以触发缓存,提升性能;

GET /索引名称/_search

{

        "query":{

                "constant_score":{

                        "filter":{

                                "term":{

                                        "title.keyword":"java设计模式"

                                 }     

                         }

                }  

        },

        "size":10

}

范围查询

POST/索引名称/_search

{

        "query":{

                "rang":{

                        "age":{

                                "gte":25,

                                "lte":32

                        }

                }        

        },

        "size":10

}

高亮查询不做过多介绍,自行了解

你可能感兴趣的:(elasticsearch,大数据,搜索引擎)