elasticsearch之基本查询

SilasSorrel 3年前

来自: https://segmentfault.com/a/1190000004428116

本文主要记录es的基本查询api的使用

基本查询种类

term查询

{       "query": {          "term": {              "title": "crime"          }      }  }
  • 指定权重

{       "query": {          "term": {              "title": {                  "value":"crime",                  "boost":10.0               }          }      }  }
  • 多term查询查询tags中包含novel或book

{       "query": {          "terms": {              "tags": ["novel","book"]          }      }  }

常用词查询

简单理解就是去除停用词的高权限,分高低频两组去查询,像停用词就是高频的,cutoff_frequency表示低于这个概率的词将出现在低频组中。

{       "query": {          "common": {               "title":{                   "query":"crime and punishment",                   "cutoff_frequency":0.001               }          }      }  }

match查询( 不支持lucene查询语法 )

查询title包含crime或and或punishment的文档

{       "query": {          "match": {              "title": "crime and punishment"          }      }  }

operator操作符

要求and或者or匹配文本的分词

{       "query": {          "match": {              "title": {                   "query":"crime and punishment",                   "operator":"and"              }          }      }  }

短语查询

{       "query": {          "match_phrase": {              "title": {                   "query":"crime  punishment",                   "slop":1              }          }      }  }

前缀查询

对查询关键词的最后一个词条做前缀匹配

{       "query": {          "match_phrase_prefix": {              "title": {                   "query":"crime  punish",                   "slop":1,                   "max_expansions":20              }          }      }  }

multi_match( 针对多个字段查询 )

{       "query": {          "multi_match": {               "query":"crime  heller",               "fields":["title","author"]          }      }  }

query_string查询( 支持lucene的查询语法 )

title字段包含crime,且权重为10,也要包含punishment,但是otitle不包含cat,同事author字段包含Fyodor和dostoevsky。

{       "query": {          "query_string": {               "query":"title:crime^10 +title:punishment -otitle:cat +author:(+Fyodor +dostoevsky)",               "default_field":"title"          }      }  }

针对多字段查询

use_dis_max使用最大分查询,max指对于给定的关键词,只有最高分才会包括在最后的文档的评分中,而不是所有包含该词条的所有字段分数之和。

{       "query": {          "query_string": {               "query":"crime heller",               "fields":["title","author"],                "use_dis_max":true          }      }  }

simple_query_string查询

解析出错时不抛异常,丢弃查询无效的部分

{       "query": {          "simple_query_string": {               "query":"title:crime^10 +title:punishment -otitle:cat +author:(+Fyodor +dostoevsky)",               "default_operator":"or"          }      }  }

标识符查询

使用唯一表示uid来说查找

{       "query": {          "ids": {               "type":"book",               "values":["1","2","3"]          }      }  }

前缀查询

前缀匹配给定的关键词

{       "query": {          "prefix": {               "title":"cri"          }      }  }
  • 指定权重

{       "query": {          "prefix": {               "title":{                   "value":"cri",                   "boost":3.0               }          }      }  }

fuzzy查询

使用编辑距离的模糊查询,计算量较大,但是对用户拼写错的场景比较有用

{       "query": {          "fuzzy": {               "title":"crme"          }      }  }
  • 指定最小相似度偏差

{       "query": {          "fuzzy": {               "title":{                   "value":"crme",                   "min_similarity":1                }          }      }  }

通配符查询

支持*和?等通配符

{       "query": {          "wildcard": {               "title": "cr?me"          }      }  }

范围查询

只能针对单个字段,可以是数值型的,也可以是基于字符串的。

{       "query": {          "range": {               "year": {                    "gte" :1890,                    "lte":1900                }          }      }  }

正则表达式查询

查询性能取决于正则表达式

{       "query": {          "regexp": {               "title": {                    "value" :"cr.m[ae]",                    "boost":10.0                }          }      }  }

布尔查询( 组合查询 )

{      "query": {          "bool": {              "must": {                  "term": {                      "title": "crime"                  }              },               "should": {                  "range": {                      "year": {                          "from": 1900,                           "to": 2000                      }                  }              },               "must_not": {                  "term": {                      "otitle": "nothing"                  }              }          }      }  }

参考