Skip to content

Instantly share code, notes, and snippets.

@xiazhibin
Last active November 8, 2017 07:27
Show Gist options
  • Save xiazhibin/b1559843b9f7b71759935bd93e62a9a5 to your computer and use it in GitHub Desktop.
Save xiazhibin/b1559843b9f7b71759935bd93e62a9a5 to your computer and use it in GitHub Desktop.
elasticsearch.md

文档元数据

索引(_index/index)

  • 文档存在哪里

类型(_type/type)

  • 文档表示的对象类别

id(_id)

  • 文档唯一标识

当以上三个组合在一起可以确定Elasticsearch中的一个文档


搜索

映射(mapping)

  • 文档里面的字段对应的数据类型

分析(analysis)

领域特定查询语言(Query DSL)


查询API

空查询

  • GET /_search?from=30&size=10 或者 使用 POST 也是可以的

查询表达式

  • 例子
GET /_search
{
    "query":YOUR_QUERY_HERE
}

查询语句的结构

要使用这种查询表达式,只需将查询语句传递给query参数:

{
    QUERY_NAME: {
        ARGUMENT: VALUE,
        ARGUMENT: VALUE,...
    }
}
{
    QUERY_NAME: {
        FIELD_NAME: {
            ARGUMENT: VALUE,
            ARGUMENT: VALUE,...
        }
    }
}

复合语句

  • 叶子语句match range
  • 复合语句bool must
  • 例子
{
     "bool": {
        "must":     { "match": { "tweet": "elasticsearch" }},
        "must_not": { "match": { "name":  "mary" }},
        "should":   { "match": { "tweet": "full text" }},
        "filter":   { "range": { "age" : { "gt" : 30 }} }
     }
}

查询和过滤

  • 查询(scoring query)是对文档进行匹配,算一个分
  • 过滤(filtering query)简单的检查包含或者排除,计算速度快

组合多查询

  • must 文档 必须 匹配这些条件才能被包含进来。
  • must_not 文档 必须不 匹配这些条件才能被包含进来。
  • should 如果这些语句中任何语句满足,则增加_score
  • filter 必须匹配

bool查询


索引管理

创建索引

PUT /my_index
{
    "settings": { ... any settings ... },
    "mappings": {
        "type_one": { ... any mappings ... },
        "type_two": { ... any mappings ... },
        ...
    }
}

删除索引

DELETE /my_index DELETE /_all

分析API

待续

深入搜索

请尽可能多使用过滤式查询

精确查找

  • term查询,精确匹配,包含就行
  • 使一些字段不使用分析
  • 范围搜索range

组合过滤器

  • bool过滤器 可以自己嵌套自己
{
   "bool" : {
      "must" :     [],
      "should" :   [],
      "must_not" : [],
   }
}

match查询是进行全文查

range范围搜索

{
    "query": {
        "range" : {
            "publish_at" : {
                "gte": "2017-11-01",
                "format": "yyyy-MM-dd || yyyy-MM-dd HH:mm:ss"
            }
        }
    }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment