elasticsearch 5.2.2 学习笔记之源码阅读13-应用与组件

elasticsearch 5.2.2 学习笔记之源码阅读13-应用与组件

背景

简述

  • 关系型数据库与es对比
    elasticsearch 5.2.2 学习笔记之源码阅读13-应用与组件
  • es是基于lucene的分布式全文搜索引擎,es集群由多个节点(node)组成,每一个节点上管理多个索引(index)分片,每一个索引可包含多个类型(type)用于区分不同类型的数据,每一个类型都包含多行的文档(document),每一行文档可包含多个字段(field)
  • es提供丰富的rest api供我们进行索引/查询/管理集群等等,后续均已rest接口与es集群进行交互

工具

REST展示

索引数据

{
  "index": {
    "analysis": {
      "analyzer": {
        "by_synonym_smart": {
          "type": "custom",
          "tokenizer": "ik_smart",
          "filter": ["by_tfr","remote_synonym"],
          "char_filter": [
            "by_cfr"
          ]
        },
        "by_synonym_max_word": {
          "type": "custom",
          "tokenizer": "ik_max_word",
          "filter": ["by_tfr","remote_synonym"],
          "char_filter": [
            "by_cfr"
          ]
        }
      },
      "filter": {
        "by_tfr": {
          "type": "stop",
          "stopwords": [" "]
        },
        "remote_synonym": {
          "type" : "dynamic_synonym",
          "synonyms_path" : "可以访问的同义词路径",
        "interval": 21600
        }
      },
      "char_filter": {
        "by_cfr": {
          "type": "mapping",
          "mappings": ["| => |","- => "]
        }
      }
    }
  }
}
{
    	"properties": { 
        "mesg":    { "type": "text","analyzer":"by_synonym_smart"  }, 
        "user":     { "type": "text"  }, 
        "date":      { "type": "integer" }  
      }
}
{
"date" : 12345,
"user" : "chenlin7",
"mesg" : "好好学习,天天向上,Elasticsearch,first message into Elasticsearch"
}

查询数据

{
    "tokens": [
        {
            "token": "好好学习",
            "start_offset": 0,
            "end_offset": 4,
            "type": "CN_WORD",
            "position": 0
        }
    ]
}
{
    "tokens": [
        {
            "token": "好",
            "start_offset": 0,
            "end_offset": 1,
            "type": "<IDEOGRAPHIC>",
            "position": 0
        },
        {
            "token": "好",
            "start_offset": 1,
            "end_offset": 2,
            "type": "<IDEOGRAPHIC>",
            "position": 1
        },
        {
            "token": "学",
            "start_offset": 2,
            "end_offset": 3,
            "type": "<IDEOGRAPHIC>",
            "position": 2
        },
        {
            "token": "习",
            "start_offset": 3,
            "end_offset": 4,
            "type": "<IDEOGRAPHIC>",
            "position": 3
        }
    ]
}
{
    "query": {
        "query_string": {
            "query": "Elasticsearch"
        }
    }
}

搜索应用

索引方面

搜索策略方面

  • 同义词维护
    • 部分名称采用同义词方式维护,进行查询
  • 别称维护
    • 部分名称采用别称方式维护,进行查询
  • 搜索方式
{
    "query": {
        "bool": {
            "must": {
"function_score": 
                {
    "query": {
        "query_string": {
            "fields": [
                "mesg"
            ],
            "query": "Elasticsearch",
            "analyze_wildcard": true
        }
    },
    "functions": [
        {
            "exp": {
                "date": {
                    "origin": "1538128202568",
                    "offset": "15768000000",
                    "scale": "1",
                    "decay": 0.5
                }
            },
            "weight": 15
        }
    ],
    "score_mode": "sum"
}            },
            "must": {
                "query_string": {
                    "query": "user:chen*"                }
            }
        }
    },
    "highlight": {
        "pre_tags" : ["<test>"],
        "post_tags" : ["</test>"],
        "fields" : {
"mesg":{}        }                    },
    "from": 0,
    "size": 15,
     "sort": ["_score"]
    }
}
  • 排序方式
    • 自定义排序需要根据各自业务进行相关的优化,例如我们的文章相关
      • 文章排序(以半年时间维度精选衰减,时间 15% + 阅读量 10% + 评论数 10%)
      • 其实这里想要更细化的控制,可以使用script去做也是类似的

ELK组件

通用平台

elasticsearch 5.2.2 学习笔记之源码阅读13-应用与组件

公司内部elk与hadoop

  • elasticsearch 5.2.2 学习笔记之源码阅读13-应用与组件

elasticsearch 架构

elasticsearch 5.2.2 学习笔记之源码阅读13-应用与组件

elasticsearch学习三重境

应用对接

java cloud 接入

大数据相关

  • elasticsearch 5.2.2 学习笔记之源码阅读13-应用与组件
  • 目前大数据平台使用es-hadoop从es获取相关业务的完整业务数据

参考