kun-song / my-blog

个人博客
3 stars 0 forks source link

Elastic Search #26

Closed kun-song closed 6 years ago

kun-song commented 6 years ago

Elasticsearch 是一个实时的分布式搜索引擎,建立在 Apache Lucene 上,可以用作:

Lucene 非常复杂,Elasticsearch 内部使用 Lucene 做搜索、索引,但屏蔽了 Lucene 的复杂性,为用户提供了一套简单易用的 REST 接口,但 Elasticseach 不仅仅是搜索引擎,还是:

Elasticsearch 将所有这些功能打包成一个服务,用户使用 REST 接口与之交互。

ES 内置两个客户端:

配置

  1. max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]

  2. max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

索引

ES 中索引一词具有多种含义:

默认情况下,每个文档的每个属性都有倒排索引,因此都可以被索引、被搜索(无倒排索引则无法被搜索)。

文档路径

对文档索引、检索,都需要指定文档的路径,文档路径 /megacorp/employee/1 有以下三部分组成:

增删改查

ES 的增删改查使用 HTTP 方法实现:

检索文档

指令:curl -XGET 'localhost:9200/megacorp/employee/1?pretty',看起来是设计良好的 REST 接口,结果为:

{
  "_index" :   "megacorp",
  "_type" :    "employee",
  "_id" :      "1",
  "_version" : 1,
  "found" :    true,
  "_source" :  {
      "first_name" :  "John",
      "last_name" :   "Smith",
      "age" :         25,
      "about" :       "I love to go rock climbing",
      "interests":  [ "sports", "music" ]
  }
}

搜索

轻量级搜索

最简单的搜索方式为将 id 替换为查询条件:

curl -XGET 'localhost:9200/megacorp/employee/_search?age=35&pretty'

查询条件以 GET 参数形式提供。

使用 DSL 搜索

ES 定义了一个查询 DSL:

{
    "query" : {
        "match" : {
            "last_name" : "Smith"
        }
    }
}

此时查询条件将不在 GET 方法的 query string 中,而是在 request body 中。

全文搜索

全文检索使用传统数据库很难实现,全文搜索使用 DSL 的 about 实现,与传统数据库不同,ES 中的匹配不止两种状态(匹配、不匹配),ES 的匹配会有一个相关性得分,搜索结果按照相关性得分排序。