Closed kun-song closed 6 years ago
Elasticsearch 是一个实时的分布式搜索引擎,建立在 Apache Lucene 上,可以用作:
Lucene 非常复杂,Elasticsearch 内部使用 Lucene 做搜索、索引,但屏蔽了 Lucene 的复杂性,为用户提供了一套简单易用的 REST 接口,但 Elasticseach 不仅仅是搜索引擎,还是:
Elasticsearch 将所有这些功能打包成一个服务,用户使用 REST 接口与之交互。
ES 内置两个客户端:
max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
ES 中索引一词具有多种含义:
insert
默认情况下,每个文档的每个属性都有倒排索引,因此都可以被索引、被搜索(无倒排索引则无法被搜索)。
对文档索引、检索,都需要指定文档的路径,文档路径 /megacorp/employee/1 有以下三部分组成:
/megacorp/employee/1
ES 的增删改查使用 HTTP 方法实现:
指令:curl -XGET 'localhost:9200/megacorp/employee/1?pretty',看起来是设计良好的 REST 接口,结果为:
curl -XGET 'localhost:9200/megacorp/employee/1?pretty'
{ "_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 替换为查询条件:
id
curl -XGET 'localhost:9200/megacorp/employee/_search?age=35&pretty'
查询条件以 GET 参数形式提供。
ES 定义了一个查询 DSL:
{ "query" : { "match" : { "last_name" : "Smith" } } }
此时查询条件将不在 GET 方法的 query string 中,而是在 request body 中。
全文检索使用传统数据库很难实现,全文搜索使用 DSL 的 about 实现,与传统数据库不同,ES 中的匹配不止两种状态(匹配、不匹配),ES 的匹配会有一个相关性得分,搜索结果按照相关性得分排序。
about
Elasticsearch 是一个实时的分布式搜索引擎,建立在 Apache Lucene 上,可以用作:
Lucene 非常复杂,Elasticsearch 内部使用 Lucene 做搜索、索引,但屏蔽了 Lucene 的复杂性,为用户提供了一套简单易用的 REST 接口,但 Elasticseach 不仅仅是搜索引擎,还是:
Elasticsearch 将所有这些功能打包成一个服务,用户使用 REST 接口与之交互。
ES 内置两个客户端:
配置
max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
索引
ES 中索引一词具有多种含义:
insert
含义文档路径
对文档索引、检索,都需要指定文档的路径,文档路径
/megacorp/employee/1
有以下三部分组成:增删改查
ES 的增删改查使用 HTTP 方法实现:
检索文档
指令:
curl -XGET 'localhost:9200/megacorp/employee/1?pretty'
,看起来是设计良好的 REST 接口,结果为:搜索
轻量级搜索
最简单的搜索方式为将
id
替换为查询条件:查询条件以 GET 参数形式提供。
使用 DSL 搜索
ES 定义了一个查询 DSL:
此时查询条件将不在 GET 方法的 query string 中,而是在 request body 中。
全文搜索
全文检索使用传统数据库很难实现,全文搜索使用 DSL 的
about
实现,与传统数据库不同,ES 中的匹配不止两种状态(匹配、不匹配),ES 的匹配会有一个相关性得分,搜索结果按照相关性得分排序。