ElasticSearch上手指南

MarRizzo 9年前

来自: https://blog.huachao.me/2016/2/ElasticSearch上手指南/

一句话说服你用elasticsearch,“github用elasticsearch实时检索1300亿行代码”

ElasticSearch的基本特征

  • 几乎实时的索引,大概有1秒的延迟,就能使被索引的数据被检索到
  • 一台elastic server只能加入到一个cluster
  • 索引名,例如一个blog的索引
  • type,是一个索引名的一个维度(category),例如blog的数据(blog/data), blog的评论(blog/comment)
  • 文档,一个文档是索引名+type的能够被索引的数据
  • 分片与备份,如果一个cluster有2台elastic server,那么默认情况下一个索引有5个主分片和5个备份

ElasticSearch的安装与启动

  • 官方网站下载直通
  • 最好使用最近版OracleJDK,JDK 7也行
  • 启动之前修改 bin/elasticsearch.yml 中的 cluster.name 和 node.name ,前者用来自动加入相同 cluster.name 的集群
  • bin/elasticsearch 启动,或者 bin/elasticsearch -d 以守护进程启动
  • 启动完毕后 http://localhost:9200

图形用户界面

CRUD

  • Create : PUT /indexName/type/id {...} 如果url中不提供id,es会生成一个。同一个url如果PUT多次会累加 _version ,并且新的版本会替换老的版本
  • Update : POST /indexName/type/id/_update {'doc':{'field':value}}
  • Delete : DELETE url
  • Read : GET url
  • 批量索引: POST /indexName/type/_bulk {"index":{"_id":n}\n{json}}

Search

例子0:搜所有

curl -XPOST 'localhost:9200/bank/_search?pretty' -d '  {    "query": { "match_all": {} },    "sort": { "balance": { "order": "desc" } }  }'
</div>

例子1:模糊匹配keywords

Post /indexName/type/_search  {    "query": {      "match":{        "field": keywords      }    },    "size":n  }
</div>

例子2:完整匹配keywords

Get /indexName/type/_search  {    "query": {      "match_phrase":{        "field": keywords      }    },    "from":fromNo,    "size":n  }
</div>

例子3:多个条件组合

Get /indexName/type/_search  {    "query": {      "bool":{        "must": [          "match": {            "field": keyword1          }          "match_phrase":{            }        ]      }    }  }
</div>

例子4:返回部分字段

curl -XPOST 'localhost:9200/bank/_search?pretty' -d '  {    "query": { "match_all": {} },    "_source": ["account_number", "balance"]  }'
</div>

例子5:Filter的例子

curl -XPOST 'localhost:9200/bank/_search?pretty' -d '  {    "query": {      "bool": {        "must": { "match_all": {} },        "filter": {          "range": {            "balance": {              "gte": 20000,              "lte": 30000            }          }        }      }    }  }'
</div> </div>