Elasticsearch cheat sheet

1

curl -X<REST Verb> <Node>:<Port>/<Index>/<Type>/<ID>

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

bool must: 所有的查询都必须为真 bool should: 只要有一个查询匹配 bool must_not: 查询列表中的的所有查询都必须都不为真

2. 执行过滤器

_score: 指定的搜索查询匹配程度的一个相对度量。得分越高,文档越相关,得分越低文档的相关度越低。 Elasticsearch中的所有的查询都会触发相关度得分的计算。对于那些我们不需要相关度得分的场景下,Elasticsearch以过滤器的形式提供了另一种查询功能。

过滤器在概念上类似于查询,但是它们有非常快的执行速度,这种快的执行速度主要有以下两个原因:

  • 过滤器不会计算相关度的得分,所以它们在计算上更快一些
  • 过滤器可以被缓存到内存中,这使得在重复的搜索查询上,其要比相应的查询快出许多。

通常情况下,要决定是使用过滤器还是使用查询,你就需要问自己是否需要相关度得分。如果相关度是不重要的,使用过滤器,否则使用查询。

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

3

doc[‘my_field’].value和_source.my_field之间的不同:

  • 首先,使用doc关键字,会使相应的字段加载到内存,执行速度更快但是更耗费内存;
  • 第二,doc[…]符号 仅允许简单的值字段,只在基于字段的非分析或者单个项上有意义;
  • _source加载、分析source,然后仅仅返回相关部分的json。

参考

  • elasticsearch guide chinese
  • https://gist.github.com/ruanbekker/e8a09604b14f37e8d2f743a87b930f93
  • https://gist.github.com/stephen-puiszis/212b8a8b37f67c670422

View on GitHub