Elasticsearch学习系列之term和match查询

来源:互联网 发布:linux查ip地址命令 编辑:程序博客网 时间:2024/05/23 23:31
文章出处:http://www.cnblogs.com/zhaijunming5/p/6427100.html

Elasticsearch查询模式

一种是像传递URL参数一样去传递查询语句,被称为简单查询

GET /library/books/_search //查询index为library,type为books的全部内容GET /library/books/_search?q=price:10 //查询index为library,type为books中price等于10的

另一种是DSL语句来进行查询,被称为DSL查询,term和match就属于DSL

term查询

term是代表完全匹配,即不进行分词器分析,文档中必须包含整个搜索的词汇

格式

复制代码
GET /library/books/_search       #这里是变化的,指定index和type;(比如说index为library,type为books){  "query": {    "term": {        "key": "value"              #这里是变化的,比如说查询title等于elasticsearch的内容      }    }}
复制代码

实例1:查询index为library,type为books重title等于elasticsearch的内容

复制代码
GET /library/books/_search{  "query": {    "term": {        "title": "elasticsearch"    }  }}
复制代码

match查询

match和term的区别是,match查询的时候,elasticsearch会根据你给定的字段提供合适的分析器,而term查询不会有分析器分析的过程

match查询相当于模糊匹配,只包含其中一部分关键词就行

格式

复制代码
GET /library/books/_search {    "query":{        "match":{            "key":"value"              }    }}
复制代码

实例1:过滤出preview字段中包含"elasticsearch"的索引,并且只显示preview和title字段

复制代码
GET /library/books/_search {    "fields":["preview","title"]    "query":{        "match":{            "preview":"elasticsearch"              }    }}
复制代码

match_all查询

查询指定索引下的所有文档

实例1:过滤出index为library,type为books的所有文档

GET /library/books/_search {    "query":{        "match_all":{}           }                                    }

实例2:通过match_all过滤出所有字段,然后通过partial在过滤出包含preview的字段和排除title,price的字段

复制代码
GET /library/books/_search {    "partial_fields":{        "partial":{            "include":["preview"],         #包含preview字段的文档            "exclude":["title,price"]    #排除title,price字段        },    "query":{        "match_all":[]    }    }}
复制代码

match_phrase查询

短语查询,slop定义的是关键词之间隔多少未知单词

格式

复制代码
GET /library/books/_search {    "query":{        "match_phrase" :{            "query":"Elasticsearch,distributed",            "slop":2                                 #表示Elasticsearch和distributed之间隔多少单词        }    }}
复制代码

multi_match查询

可以指定多个字段

实例1:查询title和preview这两个字段都包含Elasticsearch关键词的文档

复制代码
GET /library/books/_search {    "query":{        "multi_match":{            "query":"Elasticsearch"            "fields":["title","preview"]        }    }}
复制代码

filter过滤查询

查询同时,通过filter条件在不影响打分的情况下筛选出想要的数据

简单的filter查询

实例1:先查询index为library,type为books的全部文档;再过滤price等于20的

复制代码
GET /store/products/_search{  "query": {    "filtered":{        "query":{            "match_all": {}  #先查询index为store,type        },        "filter": {          "term" :{              "price":20    #这里是条件,price等于20的          }        }    }  }}
复制代码

filter之bool过滤查询

格式

复制代码
{"bool":{    "must"        : [],    "should"   : [],    "must_not" : [],}}#must:条件必须满足,相当于sql语句的and#should:条件可以满足也可以不满足,相当于sql语句的or#must_not:条件不需要满足,相当于sql语句的not
复制代码

实例1:查询价格等于20或者productID等于SD1002136的商品,再排除价格等于30的

复制代码
GET /store/products/_search{  "query": {    "filtered":{      "filter":{        "bool":{          "should": [            {"term" : {"price" : 20}},            {"term" : {"productID" : "SD1002136"}}          ],          "must_not": {            "term" :{"price":30}          }        }          }  }}}
复制代码

filter之and,not,or查询

没有bool,也可以直接使用and,or,not

实例1:and用法,查询价格是10元并且productID又是SD1002136的结果

复制代码
GET /store/products/_search{  "query":{    "filtered":{      "filter":{        "and":[          {            "term":{              "price":10            }          },          {            "term":{              "productID":"SD1002136"            }          }          ]      },      "query":{        "match_all": {}      }    }  }  }
复制代码

实例2:or用法,查询价格是10元或者productID是SD4535233的商品

复制代码
GET /store/products/_search{  "query":{    "filtered":{      "filter":{        "or":[          {            "term":{              "price":10            }          },          {            "term":{              "productID":"SD4535233"            }          }          ]      },      "query":{        "match_all":{}      }    }  }}
复制代码

实例3:not用法,查询productID不是SD1002136的商品

复制代码
GET /store/products/_search{  "query":{    "filtered":{      "filter":{        "not":{          "term":{            "productID":"SD1002136"          }        }      },      "query":{        "match_all": {}      }    }  }}
复制代码

filter之range范围查询

格式

复制代码
GET /store/products/_search{    "query":{        "filtered":{            "filter":{                "range":{                    "key":{                        "条件" : value1                        "条件": value2                    }                }            }        }    }}
复制代码

条件

gt : 大于lt : 小于gte : 大于等于lte :小于等于

实例1:查询price大于等于20小于等于40的结果

复制代码
GET /store/products/_search{    "query":{        "filtered":{            "filter":{                "range":{                    "price":{                        "gte" : 20,                        "lte" : 40                    }                }            }        }    }}
复制代码
原创粉丝点击