美文网首页ES
Elastic Search

Elastic Search

作者: lixwcqs | 来源:发表于2017-12-18 22:53 被阅读8次

类比关系型数据库

类比关系型数据库

DSL(Domain Specific Language特定领域语言)语法

查询表达式

查询格式

  • 一个查询子句一般使用这种结构:
{
  QUERY_NAME: {
      ARGUMENT: VALUE,
      ARGUMENT: VALUE,...
  }
}
  • 指向一个指定的字段:
{
  QUERY_NAME: {
    FIELD_NAME: {
      ARGUMENT: VALUE,
      ARGUMENT: VALUE,...
    }
  }
}

1. 叶查询子句(Leaf query clauses)

它们在特定字段中查找特定值

2. 复合查询子句(Compund query clauses)

这些查询是叶查询子句和其他复合查询的组合,用于提取所需的信息。

两种结构化语句

过滤语句

  • term
    term 主要用于精确匹配哪些值,比如数字,日期,布尔值或 not_analyzed 的字符串(未经分析的文本数据类型)。
{ "term": { "age": 26 }}
{ "term": { "date": "2014-09-01" }}
{ "term": { "public": true }}
{ "term": { "tag": "full_text" }}
  • terms
    terms 跟 term 有点类似,但 terms 允许指定多个匹配条件。 如果某个字段指定了多个值,那么文档需要一起去做匹配:
{
  "terms": {
    "tag": [ "search", "full_text", "nosql" ]
  }
}
  • range
    范围查找,操作符包含:
    • gt :: 大于
    • gte :: 大于等于
    • lt :: 小于
    • lte :: 小于等于
{
  "range": {
     "age": {
     "gte": 20,
     "lt": 30
    }
  }
}
  • exists 和 missing
    exists 文档中包含指定字段, missing 文档中没有包含某个字段,类似于SQL语句中的 IS_NULL 条件
{
    "exists": {
        "field": "title"
    }
}

这两个过滤只是针对已经查出一批数据来,但是想区分出某个字段是否存在的时候使用

  • bool
    合并多个过滤条件查询结果,包含操作符:
    • must :: 多个查询条件的完全匹配,相当于 and 。
    • must_not :: 多个查询条件的相反匹配,相当于 not 。
    • should :: 至少有一个查询条件匹配, 相当于 or 。
{
    "bool": {
        "must": { "term": { "folder": "inbox" }},
        "must_not": { "term": { "tag": "spam" }},
        "should": [
            { "term": { "starred": true }},
            { "term": { "unread": true }}
        ]
    }
}

查询语句

  • match_all
    查询到所有文档,是没有查询条件下的默认语句。
{
   match_all:{}
}
  • match

查询关注的是相关性,而过滤关注为是否符合条件。
一般使用查询语句做全文本搜索或其他需要进行相关性评分的时候,剩下的全部用过滤语句

相关文章

网友评论

    本文标题:Elastic Search

    本文链接:https://www.haomeiwen.com/subject/xvsvwxtx.html