// mysql表结构 转换为 elasticsearch mapping 工具

$field_config[‘full_text_search’] = ‘
“<field>”: {
“type”: “string”,
“indexAnalyzer”: “ik”,
“searchAnalyzer”: “ik”
}’;
$field_config[‘full_text_search’] = ‘
“<field>”: {
“type”: “date”,
“format”: “strict_date_optional_time||epoch_millis”
}’;

// PUT /my_temp_index
// {
//     “settings”: {
//     “number_of_shards” :   1,  // 定义一个索引的主分片个数,默认值是 5。这个配置在索引创建后不能修改。
//     “number_of_replicas” : 0   // 每个主分片的复制分片个数,默认是 1。这个配置可以随时在活跃的索引上修改。
// }
// }

// analysis  分析配置                       analyzer 分析器

// standard 分析器是用于全文字段的默认分析器,对于大部分西方语系来说是一个不错的选择。它考虑了以下几点:
//     standard 分词器,在词层级上分割输入的文本。
//     standard 标记过滤器,被设计用来整理分词器触发的所有标记(但是目前什么都没做)。
//     lowercase 标记过滤器,将所有标记转换为小写。
//     stop 标记过滤器,删除所有可能会造成搜索歧义的停用词,如 a,the,and,is。

//PUT /my_index
$post = ‘
PUT /my_index
{
“settings”: {
“analysis”: {
“char_filter”: {
“&_to_and”: {
“type”:       “mapping”,
“mappings”: [ “&=> and “]
}},
“filter”: {
“my_stopwords”: {
“type”:       “stop”,
“stopwords”: [ “the”, “a” ]
}},
“analyzer”: {
“my_analyzer”: {
“type”:         “custom”,
“char_filter”:  [ “html_strip”, “&_to_and” ],
“tokenizer”:    “standard”,
“filter”:       [ “lowercase”, “my_stopwords” ]
}}
}}}’;

// properties 节点,列出了文档中可能包含的每个字段的映射

// GET /_search
// {
//     “query”:   { “match_all”: {}},
//     “_source”: [ “title”, “created” ]
// }
// 在搜索请求中你可以通过限定 _source 字段来请求指定字段:
// 这些字段会从 _source 中提取出来,而不是返回整个 _source 字段。

// 动态映射 dynamic
// true:自动添加字段(默认)
// false:忽略字段
// strict:当遇到未知字段时抛出异常 (报错添加失败)

// PUT /my_index
// {
//   “mappings”: {
//     “my_type”: {
//       “dynamic”: “strict”,
//       “properties”: {
//         “title”: {
//           “type”: “string”
//         },
//         “stash”: {
//           “type”: “object”,
//           “dynamic”: true
//         }
//       }
//     }
//   }
// }

// 当遇到未知字段时,my_type 对象将会抛出异常 stash 对象会自动创建字段 通过这个映射,
// 你可以添加一个新的可搜索字段到 stash 对象中
//
// PUT /my_index/my_type/1
// { "title": "This doc adds a new field", "stash": { "new_field": "Success!" } }
//

// 但是在顶层做同样的操作则会失败
//
// PUT /my_index/my_type/1
// { "title": "This throws a StrictDynamicMappingException", "new_field": "Fail!" }
//

// 备注:将 dynamic 设置成 false 完全不会修改 _source 字段的内容。
// _source 将仍旧保持你索引时的完整 JSON 文档。
// 然而,没有被添加到映射的未知字段将不可被搜索。

// 动态模板    dynamic_templates
// PUT /my_index
// {
//     “mappings”: {
//         “my_type”: {
//             “dynamic_templates”: [
//                 { “es”: {
//                       “match”:              “*_es”,
//                       “match_mapping_type”: “string”,
//                       “mapping”: {
//                           “type”:           “string”,
//                           “analyzer”:       “spanish”
//                       }
//                 }},
//                 { “en”: {
//                       “match”:              “*”,
//                       “match_mapping_type”: “string”,
//                       “mapping”: {
//                           “type”:           “string”,
//                           “analyzer”:       “english”
//                       }
//                 }}
//             ]
// }}}

// 匹配字段名以 _es 结尾的字段. 匹配所有字符串类型字段。
// match_mapping_type 允许你限制模板只能使用在特定的类型上,就像由标准动态映射规则检测的一样,
// (例如 stronglongmatch 参数只匹配字段名,
// path_match 参数则匹配字段在一个对象中的完整路径,
// 所以 address.*.name 规则将匹配一个这样的字段:
//  { "address": { "city": { "name": "New York" } } }
// unmatchpath_unmatch 规则将用于排除未被匹配的字段。
// 更多选项见[根对象参考文档](http://bit.ly/1wdHOzG)

// es 内部 数据导出 导入
// 使用 扫描scan api 和 滚屏 scroll api 读取数据,
// 然后使用  批量操作 bulk API

// POST /my_index/my_type/_search?search_type=scan&scroll=10m
// {
//     “query”: {
//     “match_all”: {}
//     },
//     “size”: 1000
// }

// 结果:
// {
//     “_scroll_id”: “_scroll_id的值”,
//     “took”: 1,
//     “timed_out”: false,
//     “_shards”: {
//         “total”: 5,
//         “successful”: 5,
//         “failed”: 0
//     },
//     “hits”: {
//         “total”: 635826,
//         “max_score”: 0,
//         “hits”: []
//     }
// }

// GET /_search/scroll?scroll=10m&scroll_id=_scroll_id的值

// 结果是得到全部的 source 内容,不能限制字段

// 获取结果中的   result.hits.hits[中的每个._socore._source]

// 每行一个json数据,每行使用 “\n”分割

// 使用  批量操作 bulk 插入

// POST /my_index_2/my_type/_bulk

// { “title”: “This doc adds a new field”, “stash”: { “new_field”: “Success!” } }
// { “title”: “This doc adds a new field”, “stash”: { “new_field”: “Success!” } }
// { “title”: “This doc adds a new field”, “stash”: { “new_field”: “Success!” } }

// _scroll_id 会 自动过期删除,而  scroll=10m 指定的就是存货时间

存在疑问,但 每次获取的数据条数,以及总的获取数量 没有办法确定?