Elasticsearch Tips

1. elasticsearch里面的search_type
The type of the search operation to perform.

It can be:


dfs_query_then_fetch,
dfs_query_and_fetch,
query_then_fetch,
query_and_fetch.

 

2.Scroll

search 请求返回一个单一的结果“页”,而 scroll API 可以被用来检索大量的结果(甚至所有的结果).

为了使用 scroll,初始搜索请求应该在查询中指定 scroll 参数,这可以告诉 Elasticsearch 需要保持搜索的上下文环境多久。

curl -XGET 'localhost:9200/twitter/tweet/_search?scroll=1m' -d '
{
    "query": {
        "match" : {
            "title" : "elasticsearch"
        }
    }
}

 3.Nested object

考虑到在ES里面建立,删除和更新一个单一文本是原子性的,那么将相关实体保存在同一个文本里面是有意义的。

非Nested Object类型的嵌套数据会被flatten成类似以下格式:

{  

  "title":              [ eggs, nest ],  

  "body":             [ making, money, work, your ],  

  "tags":              [ cash, shares ],  

 "comments.name":    [ alice, john, smith, white ],  

 "comments.comment":  [ article, great, like, more, please, this ],  

 "comments.age":      [ 28, 31 ],  

  "comments.stars":     [ 4, 5 ],  

  "comments.date":      [ 2014-09-01, 2014-10-22 ]  

}  

所以进行以下查询时

{

    "query": {

        "bool": {

            "must": [

                { "match": { "name": "Alice" } },

                { "match": { "age": 28 } }

            ]

        }

    }

}

会出现交叉对象匹配现象——多个对象交叉匹配。
通过将comments字段映射为nested类型,而不是object类型,每一个nested object 将会作为一个隐藏的单独文本建立索引,就可以避免上述现象。

4._analyze, _explain_search_shards

 _analyze, _explain和_search_shards是Elasticsearch提供的3个辅助API,经常不为人所知和所用。_explain 用来帮助分析文档的relevance score是如何计算出来的;_search_shards则是用来分析某个搜索请求将会访问到哪些节点以及shard,这在性能调优的时候还是很有用的;而_analyze是Elasticsearch一个非常有用的API,它可以帮助你分析每一个field或者某个analyzer/tokenizer是如何分析和索引一段文字的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值