はてだBlog(仮称)

私的なブログど真ん中のつもりでしたが、気づけばWebサイト系のアプリケーション開発周りで感じたこと寄りの自分メモなどをつれづれ述べています。2020年6月現在、Elasticsearch、pandas、CMSなどに関する話題が多めです。...ですが、だんだんとより私的なプログラムのスニペット置き場になりつつあります。ブログで述べている内容は所属組織で販売している製品などに関するものではなく、また所属する組織の見解を代表するものではありません。

elasticsearch.js(JavaScript版 Elasticsearch Clients)のAPI早見表的なもの

少々思うことがあり、Elasticsearchの公式JavaScriptクライアントで何ができるのか俯瞰したかったため、APIのパラメータ早見表としてまとめてみました。

見る限り、Elasticsearchの提供するすべてのAPIインタフェースに対応するものがあるようです。

www.elastic.co

6.5 API | elasticsearch.js | Elastic

バージョン6.5のドキュメントからまとめました。 (まとめていて思ったのですが、Elasticsearchが「機能的」に何ができるかを俯瞰するとした場合に、自分の得意な言語の公式クライアントのAPI一覧から入るのは、勉強の仕方としてはアリだなと思いました。)

念のための言い訳なのですが、正確なところは公式ドキュメントを適宜参照いただく前提です。 このAPIとこのAPIでできることの違いはなんだっけ...というようなところをパラメータの違いから目grepで一瞥できるようなことを目指しています。 (自分が使うつもりの気持ちで編集しましたが、逆にいうと間違っている可能性がありますのでご了承ください。)

画像版

f:id:azotar:20190101155814p:plainf:id:azotar:20190101155835p:plainf:id:azotar:20190101155854p:plainf:id:azotar:20190101155915p:plain

...むむ、画像サイズが思うようにいかないかも。

pdf版

github.com

JavaScriptシグネチャ風版


// "  33      1   "  
    client.termvectors( { body : {},  termStatistics :true, routing :"String", parent :"String", preference :"String", fields :"String_String[]_Boolean", [offsets=true] :true, [positions=true] :true, [payloads=true] :true, version : 99999, versionType :"String", realtime :true});
// " 21       2   "  
    client.mtermvectors( { body : {}, typedKeys :true, [fieldStatistics=true] :true, termStatistics :true,  id :"String", index :"String", type :"String", routing :"String", parent :"String", preference :"String", ids :"String_String[]_Boolean", fields :"String_String[]_Boolean", [offsets=true] :true, [positions=true] :true, [payloads=true] :true, version : 99999, versionType :"String", realtime :true});
// "  1       3   "  
    client.bulk( { body : "JSONLines",  pipeline :"String", waitForActiveShards :"String", index :"String", type :"String", routing :"String",  fields :"String_String[]_Boolean", _source :"String_String[]_Boolean", _sourceExclude :"String_String[]_Boolean", _sourceInclude :"String_String[]_Boolean",  timeout :"2019-01-01", refresh :"String"});
// "  16      4   "  
    client.index( { body : {}, pipeline :"String", [opType=index] :"String",  waitForActiveShards :"String", index :"String", type :"String", routing :"String", parent :"String",  version : 99999, versionType :"String", timeout :"2019-01-01", refresh :"String"});
// "  4       5   "  
    client.create( { body : {}, pipeline :"String", waitForActiveShards :"String", id :"String", index :"String", type :"String", routing :"String", parent :"String",  version : 99999, versionType :"String", timeout :"2019-01-01", refresh :"String"});
// "  34      6   "  
    client.update( { body : {}, lang :"String", retryOnConflict : 99999,  waitForActiveShards :"String", id :"String", index :"String", type :"String", routing :"String", parent :"String",  _source :"String_String[]_Boolean", _sourceExclude :"String_String[]_Boolean", _sourceInclude :"String_String[]_Boolean", version : 99999, versionType :"String", timeout :"2019-01-01", refresh :"String"});
// "  5       7   "  
    client.delete( { body : {}, waitForActiveShards :"String", id :"String", index :"String", type :"String", routing :"String", parent :"String",  version : 99999, versionType :"String", timeout :"2019-01-01", refresh :"String"});
// "  9       8   "  
    client.exists( { body : {}, id :"String", index :"String", type :"String", routing :"String", parent :"String", preference :"String",  _source :"String_String[]_Boolean", _sourceExclude :"String_String[]_Boolean", _sourceInclude :"String_String[]_Boolean", storedFields :"String_String[]_Boolean", version : 99999, versionType :"String", realtime :true, refresh :true    });
// "  13      9   "  
    client.get( { id :"String", index :"String", type :"String", routing :"String", parent :"String", preference :"String",  _source :"String_String[]_Boolean", _sourceExclude :"String_String[]_Boolean", _sourceInclude :"String_String[]_Boolean", storedFields :"String_String[]_Boolean", version : 99999, versionType :"String", realtime :true, refresh :true });
// "  18      10  "  
    client.mget( { body : {}, id :"String", index :"String", type :"String", routing :"String", _source :"String_String[]_Boolean", _sourceExclude :"String_String[]_Boolean", _sourceInclude :"String_String[]_Boolean", storedFields :"String_String[]_Boolean",  realtime :true, refresh :true });
// "  10      11  "  
    client.existsSource( { body : {},  index :"String", type :"String", routing :"String", parent :"String", preference :"String",  _source :"String_String[]_Boolean", _sourceExclude :"String_String[]_Boolean", _sourceInclude :"String_String[]_Boolean", version : 99999, versionType :"String", realtime :true, refresh :true  });
// "  15      12  "  
    client.getSource( { id :"String", index :"String", type :"String", routing :"String", parent :"String", preference :"String",  _source :"String_String[]_Boolean", _sourceExclude :"String_String[]_Boolean", _sourceInclude :"String_String[]_Boolean", version : 99999, versionType :"String", realtime :true, refresh :true   });
// "  11      13  "  
    client.explain( { body : {},  q :"String", [defaultOperator=OR] :"String", df :"String", id :"String", index :"String", type :"String", routing :"String", parent :"String", preference :"String",  _source :"String_String[]_Boolean", _sourceExclude :"String_String[]_Boolean", _sourceInclude :"String_String[]_Boolean", storedFields :"String_String[]_Boolean", analyzeWildcard :true, analyzer :"String"});
// "  30      14  "  
    client.search( { body : {}, typedKeys :true, explain :true, q :"String", [defaultOperator=OR] :"String", df :"String", [maxConcurrentShardRequests=The default grows with the number of nodes in the cluster but is at most 256.] : 99999, id :"String", index :"String_String[]_Boolean", type :"String_String[]_Boolean", routing :"String_String[]_Boolean", preference :"String", [expandWildcards=open] :"String", _source :"String_String[]_Boolean", _sourceExclude :"String_String[]_Boolean", _sourceInclude :"String_String[]_Boolean", storedFields :"String_String[]_Boolean", version :true, timeout :"2019-01-01", analyzeWildcard :true, analyzer :"String", ignoreUnavailable :true, allowNoIndices :true, terminateAfter : 99999, lenient :true, size : 99999, from : 99999, stats :"String_String[]_Boolean", requestCache :true, sort :"String_String[]_Boolean", scroll :"2019-01-01", trackScores :true, trackTotalHits :true, [batchedReduceSize=512] : 99999, [preFilterShardSize=128] : 99999, [allowPartialSearchResults=true] :true, suggestField :"String", [suggestMode=missing] :"String", suggestSize : 99999, suggestText :"String",  searchType :"String",  docvalueFields :"String_String[]_Boolean"});
// "  3       15  "  
    client.     count( { body : {}, minScore : 99999, q :"String", [defaultOperator=OR] :"String", df :"String",  index :"String_String[]_Boolean", type :"String_String[]_Boolean", routing :"String_String[]_Boolean", preference :"String", [expandWildcards=open] :"String", fields :"String_String[]_Boolean",  analyzeWildcard :true, analyzer :"String", ignoreUnavailable :true, allowNoIndices :true, terminateAfter : 99999, lenient :true});
// " 35       16  "  
    client.updateByQuery( { body : {}, pipeline :"String", requestsPerSecond : 99999, q :"String", [defaultOperator=OR] :"String", df :"String", waitForActiveShards :"String", [waitForCompletion=true] :true, index :"String_String[]_Boolean", type :"String_String[]_Boolean", routing :"String_String[]_Boolean", searchType :"String", preference :"String", [expandWildcards=open] :"String", _source :"String_String[]_Boolean", _sourceInclude :"String_String[]_Boolean", version :true, versionType :true, [timeout=1m] :"2019-01-01", refresh :true, analyzeWildcard :true, analyzer :"String", ignoreUnavailable :true, allowNoIndices :true, terminateAfter : 99999, lenient :true, size : 99999, from : 99999, stats :"String_String[]_Boolean", requestCache :true, sort :"String_String[]_Boolean", scroll :"2019-01-01", searchTimeout :"2019-01-01", scrollSize : 99999, [slices=1] : 99999, [conflicts=abort] :"String"});
// " 6        17  "  
    client.deleteByQuery( { body : {}, requestsPerSecond : 99999, q :"String", [defaultOperator=OR] :"String", df :"String", waitForActiveShards :"String", [waitForCompletion=true] :true, index :"String_String[]_Boolean", type :"String_String[]_Boolean", routing :"String_String[]_Boolean", searchType :"String", preference :"String", [expandWildcards=open] :"String", _source :"String_String[]_Boolean", _sourceExclude :"String_String[]_Boolean", _sourceInclude :"String_String[]_Boolean", version :true, [timeout=1m] :"2019-01-01", refresh :true, analyzeWildcard :true, analyzer :"String", ignoreUnavailable :true, allowNoIndices :true, terminateAfter : 99999, lenient :true, size : 99999, from : 99999, stats :"String_String[]_Boolean", requestCache :true, sort :"String_String[]_Boolean", scroll :"2019-01-01", searchTimeout :"2019-01-01", scrollSize : 99999, [slices=1] : 99999, [conflicts=abort] :"String"});
// " 36       18  "  
    client.updateByQueryRethrottle( { body : {},   _sourceExclude :"String_String[]_Boolean"});
// " 7        19  "  
    client.deleteByQueryRethrottle( { body : {}, taskId :"String", requestsPerSecond : 99999});
// " 19       20  "  
    client.msearch( { body : "JSONLines",  typedKeys :true, [preFilterShardSize=128] : 99999,  [maxConcurrentShardRequests=The default grows with the number of nodes in the cluster but is at most 256.] : 99999, index :"String_String[]_Boolean", type :"String_String[]_Boolean", searchType :"String", preference :"String"});
// " 29       21  "  
    client.scroll( { body : {}, scrollId :"String", scroll :"2019-01-01"});
// " 2        22  "  
    client.clearScroll( { body : {}, scrollId :"String_String[]_Boolean"});
// " 25       23  "  
    client.reindex( { body : {}, [slices=1] : 99999, requestsPerSecond : 99999,  waitForActiveShards :"String", [waitForCompletion=true] :true, refresh :true,  allowNoIndices :true   });
// " 26       24  "  
    client.reindexRethrottle( { body : {}, taskId :"String", requestsPerSecond : 99999,                 [timeout=1m] :"2019-01-01"});
// " 28       25  "  
    client.scriptsPainlessExecute( { body : {}});
// " 31       26  "  
    client.searchShards( { body : {},  index :"String_String[]_Boolean", local :true,  preference :"String", [expandWildcards=open] :"String", _source :"String_String[]_Boolean",    ignoreUnavailable :true, allowNoIndices :true    });
// " 14       27  "  
    client.getScript( { id :"String", masterTimeout :"2019-01-01"});
// " 23       28  "  
    client.putScript( { body : {}, context :"String", id :"String", timeout :"2019-01-01"});
// " 8        29  "  
    client.deleteScript( { body : {}, id :"String", masterTimeout :"2019-01-01", timeout :"2019-01-01"});
// " 24       30  "  
    client.rankEval( { body : {},  index :"String_String[]_Boolean", routing :"String",  [expandWildcards=open] :"String", masterTimeout :"2019-01-01", ignoreUnavailable :true});
// " 32       31  "  
    client.searchTemplate( { body : {}, typedKeys :true, explain :true, index :"String_String[]_Boolean", type :"String_String[]_Boolean", routing :"String_String[]_Boolean", searchType :"String", preference :"String", [expandWildcards=open] :"String", profile :true, scroll :"2019-01-01", ignoreUnavailable :true});
// " 20       32  "  
    client.msearchTemplate( { body : "JSONLines",   index :"String_String[]_Boolean", type :"String_String[]_Boolean", searchType :"String", maxConcurrentSearches : 99999});
// " 27       33  "  
    client.renderSearchTemplate( { id :"String"});
// " 22       34  "  
    client.ping( "省略");
// " 17       35  "  
    client.info( ”省略");
// " 12       36  "  
    client.fieldCaps( { body : {},  index :"String_String[]_Boolean", [expandWildcards=open] :"String", fields :"String_String[]_Boolean", ignoreUnavailable :true, allowNoIndices :true });
// " 42       37  "  
    client.cat.help( { local :true,  help :true,  [ts=true] :true});
// " 37       38  "  
    client.cat.aliases( { format :"String",  masterTimeout :"2019-01-01", h :"String_String[]_Boolean", help :true, s :"String_String[]_Boolean", v :true,  name :"String_String[]_Boolean"});
// " 38       39  "  
    client.cat.allocation( { format :"String", local :true, masterTimeout :"2019-01-01", h :"String_String[]_Boolean", help :true, s :"String_String[]_Boolean", v :true, nodeId :"String_String[]_Boolean"});
// " 39       40  "  
    client.cat.count( { format :"String", bytes :"String", masterTimeout :"2019-01-01", h :"String_String[]_Boolean", help :true, s :"String_String[]_Boolean", v :true, index :"String_String[]_Boolean"});
// " 40       41  "  
    client.cat.fielddata( { format :"String", local :true, masterTimeout :"2019-01-01", h :"String_String[]_Boolean", help :true, s :"String_String[]_Boolean", v :true, fields :"String_String[]_Boolean"});
// " 41       42  "  
    client.cat.health( { format :"String", bytes :"String", masterTimeout :"2019-01-01", h :"String_String[]_Boolean", help :true, s :"String_String[]_Boolean", v :true});
// " 43       43  "  
    client.cat.indices( { format :"String", local :true, masterTimeout :"2019-01-01", h :"String_String[]_Boolean", help :true, s :"String_String[]_Boolean", v :true, index :"String_String[]_Boolean", health :"String", pri :true   });
// " 44       44  "  
    client.cat.master( { format :"String", bytes :"String", masterTimeout :"2019-01-01", h :"String_String[]_Boolean", help :true, s :"String_String[]_Boolean", v :true});
// " 45       45  "  
    client.cat.nodeattrs( { format :"String", local :true, masterTimeout :"2019-01-01", h :"String_String[]_Boolean", help :true, s :"String_String[]_Boolean", v :true});
// " 46       46  "  
    client.cat.nodes( { format :"String", local :true, masterTimeout :"2019-01-01", h :"String_String[]_Boolean", help :true, s :"String_String[]_Boolean", v :true});
// " 47       47  "  
    client.cat.pendingTasks( { format :"String",  masterTimeout :"2019-01-01", h :"String_String[]_Boolean", help :true, s :"String_String[]_Boolean", v :true, fullId :true});
// " 48       48  "  
    client.cat.plugins( { format :"String", local :true, masterTimeout :"2019-01-01", h :"String_String[]_Boolean", help :true, s :"String_String[]_Boolean", v :true});
// " 49       49  "  
    client.cat.recovery( { format :"String", local :true, masterTimeout :"2019-01-01", h :"String_String[]_Boolean", help :true, s :"String_String[]_Boolean", v :true, index :"String_String[]_Boolean"});
// " 50       50  "  
    client.cat.repositories( { format :"String", bytes :"String", masterTimeout :"2019-01-01", h :"String_String[]_Boolean", help :true, s :"String_String[]_Boolean", v :true});
// " 51       51  "  
    client.cat.segments( { format :"String", local :true, h :"String_String[]_Boolean", help :true, s :"String_String[]_Boolean", v :true, index :"String_String[]_Boolean"});
// " 52       52  "  
    client.cat.shards( { format :"String", bytes :"String", local :true, masterTimeout :"2019-01-01", h :"String_String[]_Boolean", help :true, s :"String_String[]_Boolean", v :true, index :"String_String[]_Boolean"});
// " 53       53  "  
    client.cat.snapshots( { format :"String", bytes :"String", masterTimeout :"2019-01-01", h :"String_String[]_Boolean", help :true, s :"String_String[]_Boolean", v :true, repository :"String_String[]_Boolean"});
// " 54       54  "  
    client.cat.tasks( { format :"String",  h :"String_String[]_Boolean", help :true, s :"String_String[]_Boolean", v :true, actions :"String_String[]_Boolean", parentTask : 99999, ignoreUnavailable :true, detailed :true});
// " 55       55  "  
    client.cat.templates( { format :"String",  masterTimeout :"2019-01-01", h :"String_String[]_Boolean", help :true, s :"String_String[]_Boolean", v :true, name :"String", nodeId :"String_String[]_Boolean"});
// " 56       56  "  
    client.cat.threadPool( { format :"String", local :true, masterTimeout :"2019-01-01", h :"String_String[]_Boolean", help :true, s :"String_String[]_Boolean", v :true, threadPoolPatterns :"String_String[]_Boolean"});
// " 57       57  "  
    client.cluster.allocationExplain( { includeYesDecisions :true, size :"String",     body : {}});
// " 58       58  "  
    client.cluster.getSettings( { flatSettings :true, includeDiskInfo :true, timeout :"2019-01-01", includeDefaults :true});
// " 59       59  "  
    client.cluster.health( { [level=cluster] :"String", masterTimeout :"2019-01-01", masterTimeout :"2019-01-01", timeout :"2019-01-01", waitForActiveShards :"String", waitForNodes :"String", waitForEvents :"String", waitForNoRelocatingShards :true, waitForNoInitializingShards :true, waitForStatus :"String", index :"String_String[]_Boolean"});
// " 60       60  "  
    client.cluster.pendingTasks(  { local :true});
// " 61       61  "  
    client.cluster.putSettings( { flatSettings :true, masterTimeout :"2019-01-01", timeout :"2019-01-01",   body : {}});
// " 62       62  "  
    client.cluster.remoteInfo(  { masterTimeout :"2019-01-01"});
// " 63       63  "  
    client.cluster.reroute( { dryRun :true, retryFailed :true, metric :"String_String[]_Boolean", masterTimeout :"2019-01-01", timeout :"2019-01-01",   body : {}});
// " 64       64  "  
    client.cluster.state( { local :true, explain :true, flatSettings :true, ignoreUnavailable :true, allowNoIndices :true, [expandWildcards=open] :"String", index :"String_String[]_Boolean", metric :"String_String[]_Boolean"});
// " 65       65  "  
    client.cluster.stats( { flatSettings :true, masterTimeout :"2019-01-01", nodeId :"String_String[]_Boolean"});
// " 66       66  "  
    client.indices.analyze(  { timeout :"2019-01-01", index :"String",           body : {}    });
// " 67       67  "  
    client.indices.clearCache( { fieldData :true, fields :"String_String[]_Boolean", query :true, ignoreUnavailable :true, allowNoIndices :true, [expandWildcards=open] :"String",  index :"String_String[]_Boolean", requestCache :true, request :true,    body : {}    });
// " 68       68  "  
    client.indices.close(  { fielddata :true, timeout :"2019-01-01", masterTimeout :"2019-01-01", ignoreUnavailable :true, allowNoIndices :true, [expandWildcards=open] :"String",  index :"String_String[]_Boolean",           body : {}    });
// " 69       69  "  
    client.indices.create( { waitForActiveShards :"String", timeout :"2019-01-01", masterTimeout :"2019-01-01", updateAllTypes :true,  index :"String",           body : {}    });
// " 70       70  "  
    client.indices.delete( { timeout :"2019-01-01", masterTimeout :"2019-01-01", ignoreUnavailable :true, allowNoIndices :true, [expandWildcards=open] :"String",  index :"String_String[]_Boolean",           body : {}    });
// " 71       71  "  
    client.indices.deleteAlias( { timeout :"2019-01-01", masterTimeout :"2019-01-01",  index :"String_String[]_Boolean", name :"String_String[]_Boolean",      body : {}    });
// " 72       72  "  
    client.indices.deleteTemplate( { timeout :"2019-01-01", masterTimeout :"2019-01-01",    name :"String",       body : {}    });
// " 73       73  "  
    client.indices.exists( {  local :true, ignoreUnavailable :true, allowNoIndices :true, [expandWildcards=open] :"String", flatSettings :true, includeDefaults :true, index :"String_String[]_Boolean",          body : {}    });
// " 74       74  "  
    client.indices.existsAlias( {     ignoreUnavailable :true, allowNoIndices :true, [expandWildcards=all] :"String", local :true, index :"String_String[]_Boolean", name :"String_String[]_Boolean",        body : {}    });
// " 75       75  "  
    client.indices.existsTemplate( { flatSettings :true,  masterTimeout :"2019-01-01", local :true,  name :"String_String[]_Boolean",      body : {}    });
// " 76       76  "  
    client.indices.existsType( {      ignoreUnavailable :true, allowNoIndices :true, [expandWildcards=open] :"String", local :true, index :"String_String[]_Boolean", type :"String_String[]_Boolean",       body : {}    });
// " 77       77  "  
    client.indices.flush( { force :true, ignoreUnavailable :true, allowNoIndices :true, [expandWildcards=open] :"String",  index :"String_String[]_Boolean",          body : {}    });
// " 78       78  "  
    client.indices.flushSynced(  { waitIfOngoing :true,  ignoreUnavailable :true, allowNoIndices :true, [expandWildcards=open] :"String",  index :"String_String[]_Boolean",            body : {}    });
// " 79       79  "  
    client.indices.forcemerge( { flush :true, ignoreUnavailable :true, allowNoIndices :true, [expandWildcards=open] :"String", maxNumSegments : 99999, onlyExpungeDeletes :true, index :"String_String[]_Boolean",             body : {}    });
// " 80       80  "  
    client.indices.get( {  local :true, ignoreUnavailable :true, allowNoIndices :true, [expandWildcards=open] :"String", flatSettings :true, includeDefaults :true, masterTimeout :"2019-01-01", index :"String_String[]_Boolean",             body : {}    });
// " 81       81  "  
    client.indices.getAlias( {    ignoreUnavailable :true, allowNoIndices :true, [expandWildcards=all] :"String", local :true, index :"String_String[]_Boolean", name :"String_String[]_Boolean"});
// " 82       82  "  
    client.indices.getFieldMapping( { includeDefaults :true, ignoreUnavailable :true, allowNoIndices :true, [expandWildcards=open] :"String", local :true, index :"String_String[]_Boolean", type :"String_String[]_Boolean", fields :"String_String[]_Boolean"});
// " 83       83  "  
    client.indices.getMapping( {      ignoreUnavailable :true, allowNoIndices :true, [expandWildcards=open] :"String", masterTimeout :"2019-01-01", local :true, index :"String_String[]_Boolean", type :"String_String[]_Boolean"});
// " 84       84  "  
    client.indices.getSettings( {  masterTimeout :"2019-01-01", ignoreUnavailable :true, allowNoIndices :true, [expandWildcards=open,closed] :"String", flatSettings :true, local :true, includeDefaults :true, index :"String_String[]_Boolean", name :"String_String[]_Boolean"});
// " 85       85  "  
    client.indices.getTemplate( { flatSettings :true,  masterTimeout :"2019-01-01", local :true,  name :"String_String[]_Boolean"});
// " 86       86  "  
    client.indices.getUpgrade( {      ignoreUnavailable :true, allowNoIndices :true, [expandWildcards=open] :"String",  index :"String_String[]_Boolean"});
// " 87       87  "  
    client.indices.open( { timeout :"2019-01-01", masterTimeout :"2019-01-01", ignoreUnavailable :true, allowNoIndices :true, [expandWildcards=closed] :"String", waitForActiveShards :"String",  index :"String_String[]_Boolean"});
// " 88       88  "  
    client.indices.putAlias( { timeout :"2019-01-01", masterTimeout :"2019-01-01",  index :"String_String[]_Boolean", name :"String",      body : {}    });
// " 89       89  "  
    client.indices.putMapping( { timeout :"2019-01-01", masterTimeout :"2019-01-01", ignoreUnavailable :true, allowNoIndices :true, [expandWildcards=open] :"String", updateAllTypes :true,  index :"String_String[]_Boolean", type :"String",       body : {}    });
// " 90       90  "  
    client.indices.putSettings( { timeout :"2019-01-01", preserveExisting :true, ignoreUnavailable :true, allowNoIndices :true, [expandWildcards=open] :"String", flatSettings :true,  index :"String_String[]_Boolean",          body : {}    });
// " 91       91  "  
    client.indices.putTemplate( { order : 99999, masterTimeout :"2019-01-01", timeout :"2019-01-01", masterTimeout :"2019-01-01", flatSettings :true,  name :"String",        body : {}    });
// " 92       92  "  
    client.indices.recovery( { detailed :true, create :true, index :"String_String[]_Boolean",            body : {}    });
// " 93       93  "  
    client.indices.refresh(  { activeOnly :true,  ignoreUnavailable :true, allowNoIndices :true, [expandWildcards=open] :"String",  index :"String_String[]_Boolean"});
// " 94       94  "  
    client.indices.rollover( { timeout :"2019-01-01",  masterTimeout :"2019-01-01", waitForActiveShards :"String", alias :"String", newIndex :"String"});
// " 95       95  "  
    client.indices.segments(  { dryRun :true,  ignoreUnavailable :true, allowNoIndices :true, [expandWildcards=open] :"String", verbose :true,  index :"String_String[]_Boolean",          body : {}    });
// " 96       96  "  
    client.indices.shardStores( { status :"String_String[]_Boolean", ignoreUnavailable :true, allowNoIndices :true, [expandWildcards=open] :"String",  index :"String_String[]_Boolean"});
// " 97       97  "  
    client.indices.shrink( { copySettings :true, timeout :"2019-01-01", masterTimeout :"2019-01-01", waitForActiveShards :"String",  index :"String", target :"String",        body : {}    });
// " 98       98  "  
    client.indices.split( { copySettings :true, timeout :"2019-01-01", masterTimeout :"2019-01-01", waitForActiveShards :"String",  index :"String", target :"String",         body : {}    });
// " 99       99  "  
    client.indices.stats( { completionFields :"String_String[]_Boolean", fields :"String_String[]_Boolean", groups :"String_String[]_Boolean", [level=indices] :"String", types :"String_String[]_Boolean", includeSegmentFileSizes :true, index :"String_String[]_Boolean", metric :"String_String[]_Boolean",        body : {}    });
// " 100      100 "  
    client.indices.updateAliases(  { fielddataFields :"String_String[]_Boolean", timeout :"2019-01-01", masterTimeout :"2019-01-01"});
// " 101      101 "  
    client.indices.upgrade( { allowNoIndices :true, [expandWildcards=open] :"String", ignoreUnavailable :true, waitForCompletion :true, onlyAncientSegments :true, index :"String_String[]_Boolean",           body : {}    });
// " 102      102 "  
    client.indices.validateQuery( { explain :true, allowNoIndices :true, [expandWildcards=open] :"String", q :"String", analyzer :"String", analyzeWildcard :true, [defaultOperator=OR] :"String", df :"String", lenient :true, rewrite :true, allShards :true, index :"String_String[]_Boolean", type :"String_String[]_Boolean",      body : {}    });
// " 103      103 "  
    client.ingest.deletePipeline( { masterTimeout :"2019-01-01", ignoreUnavailable :true, id :"String",     body : {}});
// " 104      104 "  
    client.ingest.getPipeline( { masterTimeout :"2019-01-01", timeout :"2019-01-01", id :"String"});
// " 105      105 "  
    client.ingest.processorGrok( "省略");
// " 106      106 "  
    client.ingest.putPipeline( { masterTimeout :"2019-01-01", id :"String",  body : {}});
// " 107      107 "  
    client.ingest.simulate( { verbose :true, timeout :"2019-01-01", id :"String",   body : {}});
// " 108      108 "  
    client.nodes.hotThreads( { interval :"2019-01-01", threads : 99999, ignoreIdleThreads :true, type :"String", timeout :"2019-01-01", nodeId :"String_String[]_Boolean"});
// " 109      109 "  
    client.nodes.info( { flatSettings :true, snapshots : 99999, timeout :"2019-01-01", nodeId :"String_String[]_Boolean", metric :"String_String[]_Boolean"});
// " 110      110 "  
    client.nodes.reloadSecureSettings( {  nodeId :"String_String[]_Boolean",    body : {}});
// " 111      111 "  
    client.nodes.stats( { completionFields :"String_String[]_Boolean", fields :"String_String[]_Boolean", groups :true, [level=node] :"String", types :"String_String[]_Boolean", timeout :"2019-01-01", includeSegmentFileSizes :true, metric :"String_String[]_Boolean", indexMetric :"String_String[]_Boolean", nodeId :"String_String[]_Boolean"});
// " 112      112 "  
    client.nodes.usage(  { fielddataFields :"String_String[]_Boolean", metric :"String_String[]_Boolean", nodeId :"String_String[]_Boolean"});
// " 113      113 "  
    client.snapshot.create( { masterTimeout :"2019-01-01",  repository :"String", snapshot :"String",               body : {}});
// " 114      114 "  
    client.snapshot.createRepository( { masterTimeout :"2019-01-01", waitForCompletion :true, verify :true, repository :"String", body : {}});
// " 115      115 "  
    client.snapshot.delete( { masterTimeout :"2019-01-01", timeout :"2019-01-01", repository :"String", snapshot :"String",              body : {}});
// " 116      116 "  
    client.snapshot.deleteRepository( { masterTimeout :"2019-01-01",  repository :"String_String[]_Boolean", body : {}});
// " 117      117 "  
    client.snapshot.get( { masterTimeout :"2019-01-01", timeout :"2019-01-01", verbose :true, repository :"String", snapshot :"String_String[]_Boolean"});
// " 118      118 "  
    client.snapshot.getRepository( { masterTimeout :"2019-01-01", ignoreUnavailable :true, repository :"String_String[]_Boolean"});
// " 119      119 "  
    client.snapshot.restore( { masterTimeout :"2019-01-01", local :true, repository :"String", snapshot :"String",               body : {}});
// " 120      120 "  
    client.snapshot.status( { masterTimeout :"2019-01-01", waitForCompletion :true, repository :"String", snapshot :"String_String[]_Boolean"});
// " 121      121 "  
    client.snapshot.verifyRepository( { masterTimeout :"2019-01-01", ignoreUnavailable :true, repository :"String", body : {}});
// " 122      122 "  
    client.tasks.cancel( { nodes :"String_String[]_Boolean", timeout :"2019-01-01",  parentTaskId :"String", taskId :"String",       body : {}});
// " 123      123 "  
    client.tasks.get(  { actions :"String_String[]_Boolean", taskId :"String"});
// " 124      124 "  
    client.tasks.list( { nodes :"String_String[]_Boolean", timeout :"2019-01-01", detailed :true,  parentTaskId :"String", waitForCompletion :true, [groupBy=nodes] :"String", timeout :"2019-01-01"});









まとめた割にはコピペビリティも一覧性も高くない...

table版

他のものは、オレオレ視点で並び替えや編集を加えていますが、これは公式の並び順に合わせています。 (コピペミスなどで抜け等あるかもしれませんが。)

無印

項番 グループ API ひとこと概要 引数 引数の項目名と型
1 トップ bulk 公式 ”バルク”のAPI [params, [callback]] ◆ waitForActiveShards ◇String  ◆refresh ◇String  ◆routing ◇String  ◆timeout ◇DurationString  ◆type ◇String  ◆fields ◇String,String,Boolean  ◆source ◇String,String,Boolean  ◆sourceExclude ◇String,String,Boolean  ◆_sourceInclude ◇String,String,Boolean  ◆pipeline ◇String  ◆index ◇String  ◆body ◇Object  ◆JSONLines 
2 トップ clearScroll 公式 scroll検索のクリア [params, [callback]] ◆ scrollId ◇String,String,Boolean  ◆body ◇Object  ,JSON 
3 トップ count 公式 件数カウント [params, [callback]] ◆ ignoreUnavailable ◇Boolean  ◆allowNoIndices ◇Boolean  ◆[expandWildcards=open] ◇String  ◆minScore ◇Number  ◆preference ◇String  ◆routing ◇String,String,Boolean  ◆q ◇String  ◆analyzer ◇String  ◆analyzeWildcard ◇Boolean  ◆[defaultOperator=OR] ◇String  ◆df ◇String  ◆lenient ◇Boolean  ◆terminateAfter ◇Number  ◆index ◇String,String,Boolean  ◆type ◇String,String,Boolean  ◆body ◇Object  ,JSON 
4 トップ create 公式 create全般 [params, [callback]] ◆ waitForActiveShards ◇String  ◆parent ◇String  ◆refresh ◇String  ◆routing ◇String  ◆timeout ◇DurationString  ◆version ◇Number  ◆versionType ◇String  ◆pipeline ◇String  ◆id ◇String  ◆index ◇String  ◆type ◇String  ◆body ◇Object  ,JSON 
5 トップ delete 公式 削除 by id [params, [callback]] ◆ waitForActiveShards ◇String  ◆parent ◇String  ◆refresh ◇String  ◆routing ◇String  ◆timeout ◇DurationString  ◆version ◇Number  ◆versionType ◇String  ◆id ◇String  ◆index ◇String  ◆type ◇String  ◆body ◇Object  ,JSON 
6 トップ deleteByQuery 公式 deleteByQuery [params, [callback]] ◆ analyzer ◇String  ◆analyzeWildcard ◇Boolean  ◆[defaultOperator=OR] ◇String  ◆df ◇String  ◆from ◇Number  ◆ignoreUnavailable ◇Boolean  ◆allowNoIndices ◇Boolean  ◆[conflicts=abort] ◇String  ◆[expandWildcards=open] ◇String  ◆lenient ◇Boolean  ◆preference ◇String  ◆q ◇String  ◆routing ◇String,String,Boolean  ◆scroll ◇DurationString  ◆searchType ◇String  ◆searchTimeout ◇DurationString  ◆size ◇Number 
公式 ◆sort ◇String,String,Boolean  ◆source ◇String,String,Boolean  ◆sourceExclude ◇String,String,Boolean  ◆_sourceInclude ◇String,String,Boolean  ◆terminateAfter ◇Number  ◆stats ◇String,String,Boolean  ◆version ◇Boolean  ◆requestCache ◇Boolean  ◆refresh ◇Boolean  ◆[timeout=1m] ◇DurationString  ◆waitForActiveShards ◇String  ◆scrollSize ◇Number  ◆[waitForCompletion=true] ◇Boolean  ◆requestsPerSecond ◇Number  ◆[slices=1] ◇Number  ◆index ◇String,String,Boolean  ◆type ◇String,String,Boolean  ◆body ◇Object  ,JSON 
7 トップ deleteByQueryRethrottle 公式 deleteByQueryリスロットル [params, [callback]] ◆ requestsPerSecond ◇Number  ◆taskId ◇String  ◆body ◇Object  ,JSON 
8 トップ deleteScript 公式 [params, [callback]] ◆ timeout ◇DurationString  ◆masterTimeout ◇DurationString  ◆id ◇String  ◆body ◇Object  ,JSON 
9 トップ exists 公式 [params, [callback]] ◆ storedFields ◇String,String,Boolean  ◆parent ◇String  ◆preference ◇String  ◆realtime ◇Boolean  ◆refresh ◇Boolean  ◆routing ◇String  ◆source ◇String,String,Boolean  ◆sourceExclude ◇String,String,Boolean  ◆_sourceInclude ◇String,String,Boolean  ◆version ◇Number  ◆versionType ◇String  ◆id ◇String  ◆index ◇String  ◆type ◇String  ◆body ◇Object  ,JSON 
10 トップ existsSource 公式 [params, [callback]] ◆ parent ◇String  ◆preference ◇String  ◆realtime ◇Boolean  ◆refresh ◇Boolean  ◆routing ◇String  ◆source ◇String,String,Boolean  ◆sourceExclude ◇String,String,Boolean  ◆_sourceInclude ◇String,String,Boolean  ◆version ◇Number  ◆versionType ◇String  ◆id ◇String  ◆index ◇String  ◆type ◇String  ◆body ◇Object  ,JSON 
11 トップ explain 公式 [params, [callback]] ◆ analyzeWildcard ◇Boolean  ◆analyzer ◇String  ◆[defaultOperator=OR] ◇String  ◆df ◇String  ◆storedFields ◇String,String,Boolean  ◆lenient ◇Boolean  ◆parent ◇String  ◆preference ◇String  ◆q ◇String  ◆routing ◇String  ◆source ◇String,String,Boolean  ◆sourceExclude ◇String,String,Boolean  ◆_sourceInclude ◇String,String,Boolean  ◆id ◇String  ◆index ◇String  ◆type ◇String  ◆body ◇Object  ,JSON 
12 トップ fieldCaps 公式 fieldCapsを確認 [params, [callback]] ◆ fields ◇String,String,Boolean  ◆ignoreUnavailable ◇Boolean  ◆allowNoIndices ◇Boolean  ◆[expandWildcards=open] ◇String  ◆index ◇String,String,Boolean  ◆body ◇Object  ,JSON 
13 トップ get 公式 JSONドキュメントを取得 by id [params, [callback]] ◆ storedFields ◇String,String,Boolean  ◆parent ◇String  ◆preference ◇String  ◆realtime ◇Boolean  ◆refresh ◇Boolean  ◆routing ◇String  ◆source ◇String,String,Boolean  ◆sourceExclude ◇String,String,Boolean  ◆_sourceInclude ◇String,String,Boolean  ◆version ◇Number  ◆versionType ◇String  ◆id ◇String  ◆index ◇String  ◆type ◇String 
14 トップ getScript 公式 [params, [callback]] ◆ masterTimeout ◇DurationString  ◆id ◇String  ◆
15 トップ getSource 公式 sourceのみ取得by id [params, [callback]] ◆ parent ◇String  ◆preference ◇String  ◆realtime ◇Boolean  ◆refresh ◇Boolean  ◆routing ◇String  ◆source ◇String,String,Boolean  ◆sourceExclude ◇String,String,Boolean  ◆_sourceInclude ◇String,String,Boolean  ◆version ◇Number  ◆versionType ◇String  ◆id ◇String  ◆index ◇String  ◆type ◇String 
16 トップ index 公式 CRUD全部 [params, [callback]] ◆ ◆waitForActiveShards ◇String  ◆[opType=index] ◇String  ◆parent ◇String  ◆refresh ◇String  ◆routing ◇String  ◆timeout ◇DurationString  ◆version ◇Number  ◆versionType ◇String  ◆pipeline ◇String  ◆id ◇String  ◆index ◇String  ◆type ◇String  ◆body ◇Object  ,JSON 
17 トップ info 公式 クラスターのbasic infoを取得 [params, [callback]]
18 トップ mget 公式 mult系 [params, [callback]] ◆ storedFields ◇String,String,Boolean  ◆preference ◇String  ◆realtime ◇Boolean  ◆refresh ◇Boolean  ◆routing ◇String  ◆source ◇String,String,Boolean  ◆sourceExclude ◇String,String,Boolean  ◆_sourceInclude ◇String,String,Boolean  ◆index ◇String  ◆type ◇String  ◆body ◇Object  ,JSON 
19 トップ msearch 公式 mult系 [params, [callback]] ◆ searchType ◇String  ◆maxConcurrentSearches ◇Number  ◆typedKeys ◇Boolean  ◆[preFilterShardSize=128] ◇Number  ◆[maxConcurrentShardRequests=The default grows with the number of nodes in the cluster but is at most 256.] ◇Number  ◆index ◇String,String,Boolean  ◆type ◇String,String,Boolean  ◆body ◇Object  ◆JSONLines 
20 トップ msearchTemplate 公式 mult系 [params, [callback]] ◆ searchType ◇String  ◆typedKeys ◇Boolean  ◆maxConcurrentSearches ◇Number  ◆index ◇String,String,Boolean  ◆type ◇String,String,Boolean  ◆body ◇Object  ◆JSONLines 
21 トップ mtermvectors 公式 [params, [callback]] ◆ ids ◇String,String,Boolean  ◆termStatistics ◇Boolean  ◆[fieldStatistics=true] ◇Boolean  ◆fields ◇String,String,Boolean  ◆[offsets=true] ◇Boolean  ◆[positions=true] ◇Boolean  ◆[payloads=true] ◇Boolean  ◆preference ◇String  ◆routing ◇String  ◆parent ◇String  ◆realtime ◇Boolean  ◆version ◇Number  ◆versionType ◇String  ◆index ◇String  ◆type ◇String  ◆body ◇Object  ,JSON 
22 トップ ping 公式 [params, [callback]]
23 トップ putScript 公式 [params, [callback]] ◆ timeout ◇DurationString  ◆masterTimeout ◇DurationString  ◆context ◇String  ◆id ◇String  ◆body ◇Object  ,JSON 
24 トップ rankEval 公式 [params, [callback]] ◆ ignoreUnavailable ◇Boolean  ◆allowNoIndices ◇Boolean  ◆[expandWildcards=open] ◇String  ◆index ◇String,String,Boolean  ◆body ◇Object  ,JSON 
25 トップ reindex 公式 [params, [callback]] ◆ refresh ◇Boolean  ◆[timeout=1m] ◇DurationString  ◆waitForActiveShards ◇String  ◆[waitForCompletion=true] ◇Boolean  ◆requestsPerSecond ◇Number  ◆[slices=1] ◇Number  ◆body ◇Object  ,JSON 
26 トップ reindexRethrottle 公式 [params, [callback]] ◆ requestsPerSecond ◇Number  ◆taskId ◇String  ◆body ◇Object  ,JSON 
27 トップ renderSearchTemplate 公式 [params, [callback]] ◆ id ◇String  ◆body ◇Object  ,JSON 
28 トップ scriptsPainlessExecute 公式 [params, [callback]]
29 トップ scroll 公式 scroll検索 [params, [callback]] ◆ scroll ◇DurationString  ◆scrollId ◇String  ◆body ◇Object  ,JSON 
30 トップ search 公式 search [params, [callback]] ◆ analyzer ◇String  ◆analyzeWildcard ◇Boolean  ◆[defaultOperator=OR] ◇String  ◆df ◇String  ◆explain ◇Boolean  ◆storedFields ◇String,String,Boolean  ◆docvalueFields ◇String,String,Boolean  ◆from ◇Number  ◆ignoreUnavailable ◇Boolean  ◆allowNoIndices ◇Boolean  ◆[expandWildcards=open] ◇String  ◆lenient ◇Boolean  ◆preference ◇String  ◆q ◇String  ◆routing ◇String,String,Boolean  ◆scroll ◇DurationString  ◆searchType ◇String  ◆size ◇Number 
公式 ◆sort ◇String,String,Boolean  ◆source ◇String,String,Boolean  ◆sourceExclude ◇String,String,Boolean  ◆_sourceInclude ◇String,String,Boolean  ◆terminateAfter ◇Number  ◆stats ◇String,String,Boolean  ◆suggestField ◇String  ◆[suggestMode=missing] ◇String  ◆suggestSize ◇Number  ◆suggestText ◇String  ◆timeout ◇DurationString  ◆trackScores ◇Boolean  ◆trackTotalHits ◇Boolean  ◆[allowPartialSearchResults=true] ◇Boolean  ◆typedKeys ◇Boolean  ◆version ◇Boolean  ◆requestCache ◇Boolean  ◆[batchedReduceSize=512] ◇Number  ◆[maxConcurrentShardRequests=The default grows with the number of nodes in the cluster but is at most 256.] ◇Number  ◆[preFilterShardSize=128] ◇Number  ◆index ◇String,String,Boolean  ◆type ◇String,String,Boolean  ◆body ◇Object  ,JSON 
31 トップ searchShards 公式 [params, [callback]] ◆ preference ◇String  ◆routing ◇String  ◆local ◇Boolean  ◆ignoreUnavailable ◇Boolean  ◆allowNoIndices ◇Boolean  ◆[expandWildcards=open] ◇String  ◆index ◇String,String,Boolean  ◆body ◇Object  ,JSON 
32 トップ searchTemplate 公式 [params, [callback]] ◆ ignoreUnavailable ◇Boolean  ◆allowNoIndices ◇Boolean  ◆[expandWildcards=open] ◇String  ◆preference ◇String  ◆routing ◇String,String,Boolean  ◆scroll ◇DurationString  ◆searchType ◇String  ◆explain ◇Boolean  ◆profile ◇Boolean  ◆typedKeys ◇Boolean  ◆index ◇String,String,Boolean  ◆type ◇String,String,Boolean  ◆body ◇Object  ,JSON 
33 トップ termvectors 公式 [params, [callback]] ◆ termStatistics ◇Boolean  ◆[fieldStatistics=true] ◇Boolean  ◆fields ◇String,String,Boolean  ◆[offsets=true] ◇Boolean  ◆[positions=true] ◇Boolean  ◆[payloads=true] ◇Boolean  ◆preference ◇String  ◆routing ◇String  ◆parent ◇String  ◆realtime ◇Boolean  ◆version ◇Number  ◆versionType ◇String  ◆index ◇String  ◆type ◇String  ◆id ◇String  ◆body ◇Object  ,JSON 
34 トップ update 公式 update(script利用可能) [params, [callback]] ◆ waitForActiveShards ◇String  ◆fields ◇String,String,Boolean  ◆source ◇String,String,Boolean  ◆sourceExclude ◇String,String,Boolean  ◆_sourceInclude ◇String,String,Boolean  ◆lang ◇String  ◆parent ◇String  ◆refresh ◇String  ◆retryOnConflict ◇Number  ◆routing ◇String  ◆timeout ◇DurationString  ◆version ◇Number  ◆versionType ◇String  ◆id ◇String  ◆index ◇String  ◆type ◇String  ◆body ◇Object  ,JSON 
35 トップ updateByQuery 公式 updateByQuery [params, [callback]] ◆ analyzer ◇String  ◆analyzeWildcard ◇Boolean  ◆[defaultOperator=OR] ◇String  ◆df ◇String  ◆from ◇Number  ◆ignoreUnavailable ◇Boolean  ◆allowNoIndices ◇Boolean  ◆[conflicts=abort] ◇String  ◆[expandWildcards=open] ◇String  ◆lenient ◇Boolean  ◆pipeline ◇String  ◆preference ◇String  ◆q ◇String  ◆routing ◇String,String,Boolean  ◆scroll ◇DurationString  ◆searchType ◇String  ◆searchTimeout ◇DurationString  ◆size ◇Number  ◆sort ◇String,String,Boolean 
公式 source ◇String,String,Boolean  ◆sourceExclude ◇String,String,Boolean  ◆_sourceInclude ◇String,String,Boolean  ◆terminateAfter ◇Number  ◆stats ◇String,String,Boolean  ◆version ◇Boolean  ◆versionType ◇Boolean  ◆requestCache ◇Boolean  ◆refresh ◇Boolean  ◆[timeout=1m] ◇DurationString  ◆waitForActiveShards ◇String  ◆scrollSize ◇Number  ◆[waitForCompletion=true] ◇Boolean  ◆requestsPerSecond ◇Number  ◆[slices=1] ◇Number  ◆index ◇String,String,Boolean  ◆type ◇String,String,Boolean  ◆body ◇Object  ,JSON 
36 トップ updateByQueryRethrottle 公式 updateByQueryリスロットル [params, [callback]] ◆ requestsPerSecond ◇Number  ◆taskId ◇String  ◆body ◇Object  ,JSON 

cat、cluster, indices

項番 グループ API ひとこと概要 引数 引数の項目名と型
37 cat aliases 公式 [params, [callback]] ◆ format ◇String  ◆local ◇Boolean  ◆masterTimeout ◇DurationString  ◆h ◇String,String,Boolean  ◆help ◇Boolean  ◆s ◇String,String,Boolean  ◆v ◇Boolean  ◆name ◇String,String,Boolean 
38 cat allocation 公式 [params, [callback]] ◆ format ◇String  ◆bytes ◇String  ◆local ◇Boolean  ◆masterTimeout ◇DurationString  ◆h ◇String,String,Boolean  ◆help ◇Boolean  ◆s ◇String,String,Boolean  ◆v ◇Boolean  ◆nodeId ◇String,String,Boolean 
39 cat count 公式 [params, [callback]] ◆ format ◇String  ◆local ◇Boolean  ◆masterTimeout ◇DurationString  ◆h ◇String,String,Boolean  ◆help ◇Boolean  ◆s ◇String,String,Boolean  ◆v ◇Boolean  ◆index ◇String,String,Boolean 
40 cat fielddata 公式 [params, [callback]] ◆ format ◇String  ◆bytes ◇String  ◆local ◇Boolean  ◆masterTimeout ◇DurationString  ◆h ◇String,String,Boolean  ◆help ◇Boolean  ◆s ◇String,String,Boolean  ◆v ◇Boolean  ◆fields ◇String,String,Boolean 
41 cat health 公式 [params, [callback]] ◆ format ◇String  ◆local ◇Boolean  ◆masterTimeout ◇DurationString  ◆h ◇String,String,Boolean  ◆help ◇Boolean  ◆s ◇String,String,Boolean  ◆[ts=true] ◇Boolean  ◆v ◇Boolean 
42 cat help 公式 [params, [callback]] ◆ help ◇Boolean  ◆s ◇String,String,Boolean  ◆
43 cat indices 公式 [params, [callback]] ◆ format ◇String  ◆bytes ◇String  ◆local ◇Boolean  ◆masterTimeout ◇DurationString  ◆h ◇String,String,Boolean  ◆health ◇String  ◆help ◇Boolean  ◆pri ◇Boolean  ◆s ◇String,String,Boolean  ◆v ◇Boolean  ◆index ◇String,String,Boolean 
44 cat master 公式 [params, [callback]] ◆ format ◇String  ◆local ◇Boolean  ◆masterTimeout ◇DurationString  ◆h ◇String,String,Boolean  ◆help ◇Boolean  ◆s ◇String,String,Boolean  ◆v ◇Boolean 
45 cat nodeattrs 公式 [params, [callback]] ◆ format ◇String  ◆local ◇Boolean  ◆masterTimeout ◇DurationString  ◆h ◇String,String,Boolean  ◆help ◇Boolean  ◆s ◇String,String,Boolean  ◆v ◇Boolean 
46 cat nodes 公式 [params, [callback]] ◆ format ◇String  ◆fullId ◇Boolean  ◆local ◇Boolean  ◆masterTimeout ◇DurationString  ◆h ◇String,String,Boolean  ◆help ◇Boolean  ◆s ◇String,String,Boolean  ◆v ◇Boolean 
47 cat pendingTasks 公式 [params, [callback]] ◆ format ◇String  ◆local ◇Boolean  ◆masterTimeout ◇DurationString  ◆h ◇String,String,Boolean  ◆help ◇Boolean  ◆s ◇String,String,Boolean  ◆v ◇Boolean 
48 cat plugins 公式 [params, [callback]] ◆ format ◇String  ◆local ◇Boolean  ◆masterTimeout ◇DurationString  ◆h ◇String,String,Boolean  ◆help ◇Boolean  ◆s ◇String,String,Boolean  ◆v ◇Boolean 
49 cat recovery 公式 [params, [callback]] ◆ format ◇String  ◆bytes ◇String  ◆masterTimeout ◇DurationString  ◆h ◇String,String,Boolean  ◆help ◇Boolean  ◆s ◇String,String,Boolean  ◆v ◇Boolean  ◆index ◇String,String,Boolean 
50 cat repositories 公式 [params, [callback]] ◆ format ◇String  ◆local ◇Boolean  ◆masterTimeout ◇DurationString  ◆h ◇String,String,Boolean  ◆help ◇Boolean  ◆s ◇String,String,Boolean  ◆v ◇Boolean 
51 cat segments 公式 [params, [callback]] ◆ format ◇String  ◆bytes ◇String  ◆h ◇String,String,Boolean  ◆help ◇Boolean  ◆s ◇String,String,Boolean  ◆v ◇Boolean  ◆index ◇String,String,Boolean 
52 cat shards 公式 [params, [callback]] ◆ format ◇String  ◆bytes ◇String  ◆local ◇Boolean  ◆masterTimeout ◇DurationString  ◆h ◇String,String,Boolean  ◆help ◇Boolean  ◆s ◇String,String,Boolean  ◆v ◇Boolean  ◆index ◇String,String,Boolean 
53 cat snapshots 公式 [params, [callback]] ◆ format ◇String  ◆ignoreUnavailable ◇Boolean  ◆masterTimeout ◇DurationString  ◆h ◇String,String,Boolean  ◆help ◇Boolean  ◆s ◇String,String,Boolean  ◆v ◇Boolean  ◆repository ◇String,String,Boolean 
54 cat tasks 公式 [params, [callback]] ◆ format ◇String  ◆nodeId ◇String,String,Boolean  ◆actions ◇String,String,Boolean  ◆detailed ◇Boolean  ◆parentTask ◇Number  ◆h ◇String,String,Boolean  ◆help ◇Boolean  ◆s ◇String,String,Boolean  ◆v ◇Boolean 
55 cat templates 公式 [params, [callback]] ◆ format ◇String  ◆local ◇Boolean  ◆masterTimeout ◇DurationString  ◆h ◇String,String,Boolean  ◆help ◇Boolean  ◆s ◇String,String,Boolean  ◆v ◇Boolean  ◆name ◇String 
56 cat threadPool 公式 [params, [callback]] ◆ format ◇String  ◆size ◇String  ◆local ◇Boolean  ◆masterTimeout ◇DurationString  ◆h ◇String,String,Boolean  ◆help ◇Boolean  ◆s ◇String,String,Boolean  ◆v ◇Boolean  ◆threadPoolPatterns ◇String,String,Boolean 
57 cluster allocationExplain 公式 [params, [callback]] ◆ includeYesDecisions ◇Boolean  ◆includeDiskInfo ◇Boolean  ◆body ◇Object  ,JSON 
58 cluster getSettings 公式 [params, [callback]] ◆ flatSettings ◇Boolean  ◆masterTimeout ◇DurationString  ◆timeout ◇DurationString  ◆includeDefaults ◇Boolean 
59 cluster health 公式 [params, [callback]] ◆ [level=cluster] ◇String  ◆local ◇Boolean  ◆masterTimeout ◇DurationString  ◆timeout ◇DurationString  ◆waitForActiveShards ◇String  ◆waitForNodes ◇String  ◆waitForEvents ◇String  ◆waitForNoRelocatingShards ◇Boolean  ◆waitForNoInitializingShards ◇Boolean  ◆waitForStatus ◇String  ◆index ◇String,String,Boolean 
60 cluster pendingTasks 公式 [params, [callback]] ◆ local ◇Boolean  ◆masterTimeout ◇DurationString 
61 cluster putSettings 公式 [params, [callback]] ◆ flatSettings ◇Boolean  ◆masterTimeout ◇DurationString  ◆timeout ◇DurationString  ◆body ◇Object  ,JSON 
62 cluster remoteInfo 公式 [params, [callback]]
63 cluster reroute 公式 [params, [callback]] ◆ dryRun ◇Boolean  ◆explain ◇Boolean  ◆retryFailed ◇Boolean  ◆metric ◇String,String,Boolean  ◆masterTimeout ◇DurationString  ◆timeout ◇DurationString  ◆body ◇Object  ,JSON 
64 cluster state 公式 [params, [callback]] ◆ local ◇Boolean  ◆masterTimeout ◇DurationString  ◆flatSettings ◇Boolean  ◆ignoreUnavailable ◇Boolean  ◆allowNoIndices ◇Boolean  ◆[expandWildcards=open] ◇String  ◆index ◇String,String,Boolean  ◆metric ◇String,String,Boolean 
65 cluster stats 公式 [params, [callback]] ◆ flatSettings ◇Boolean  ◆timeout ◇DurationString  ◆nodeId ◇String,String,Boolean 
66 indices analyze 公式 [params, [callback]] ◆ index ◇String  ◆body ◇Object  ,JSON 
67 indices clearCache 公式 [params, [callback]] ◆ fieldData ◇Boolean  ◆fielddata ◇Boolean  ◆fields ◇String,String,Boolean  ◆query ◇Boolean  ◆ignoreUnavailable ◇Boolean  ◆allowNoIndices ◇Boolean  ◆[expandWildcards=open] ◇String  ◆index ◇String,String,Boolean  ◆requestCache ◇Boolean  ◆request ◇Boolean  ◆body ◇Object  ,JSON 
68 indices close 公式 [params, [callback]] ◆ timeout ◇DurationString  ◆masterTimeout ◇DurationString  ◆ignoreUnavailable ◇Boolean  ◆allowNoIndices ◇Boolean  ◆[expandWildcards=open] ◇String  ◆index ◇String,String,Boolean  ◆body ◇Object  ,JSON 
69 indices create 公式 [params, [callback]] ◆ waitForActiveShards ◇String  ◆timeout ◇DurationString  ◆masterTimeout ◇DurationString  ◆updateAllTypes ◇Boolean  ◆index ◇String  ◆body ◇Object  ,JSON 
70 indices delete 公式 [params, [callback]] ◆ timeout ◇DurationString  ◆masterTimeout ◇DurationString  ◆ignoreUnavailable ◇Boolean  ◆allowNoIndices ◇Boolean  ◆[expandWildcards=open] ◇String  ◆index ◇String,String,Boolean  ◆body ◇Object  ,JSON 
71 indices deleteAlias 公式 [params, [callback]] ◆ timeout ◇DurationString  ◆masterTimeout ◇DurationString  ◆index ◇String,String,Boolean  ◆name ◇String,String,Boolean  ◆body ◇Object  ,JSON 
72 indices deleteTemplate 公式 [params, [callback]] ◆ timeout ◇DurationString  ◆masterTimeout ◇DurationString  ◆name ◇String  ◆body ◇Object  ,JSON 
73 indices exists 公式 [params, [callback]] ◆ local ◇Boolean  ◆ignoreUnavailable ◇Boolean  ◆allowNoIndices ◇Boolean  ◆[expandWildcards=open] ◇String  ◆flatSettings ◇Boolean  ◆includeDefaults ◇Boolean  ◆index ◇String,String,Boolean  ◆body ◇Object  ,JSON 
74 indices existsAlias 公式 [params, [callback]] ◆ ignoreUnavailable ◇Boolean  ◆allowNoIndices ◇Boolean  ◆[expandWildcards=all] ◇String  ◆local ◇Boolean  ◆index ◇String,String,Boolean  ◆name ◇String,String,Boolean  ◆body ◇Object  ,JSON 
75 indices existsTemplate 公式 [params, [callback]] ◆ flatSettings ◇Boolean  ◆masterTimeout ◇DurationString  ◆local ◇Boolean  ◆name ◇String,String,Boolean  ◆body ◇Object  ,JSON 
76 indices existsType 公式 [params, [callback]] ◆ ignoreUnavailable ◇Boolean  ◆allowNoIndices ◇Boolean  ◆[expandWildcards=open] ◇String  ◆local ◇Boolean  ◆index ◇String,String,Boolean  ◆type ◇String,String,Boolean  ◆body ◇Object  ,JSON 
77 indices flush 公式 [params, [callback]] ◆ force ◇Boolean  ◆waitIfOngoing ◇Boolean  ◆ignoreUnavailable ◇Boolean  ◆allowNoIndices ◇Boolean  ◆[expandWildcards=open] ◇String  ◆index ◇String,String,Boolean  ◆body ◇Object  ,JSON 
78 indices flushSynced 公式 [params, [callback]] ◆ ignoreUnavailable ◇Boolean  ◆allowNoIndices ◇Boolean  ◆[expandWildcards=open] ◇String  ◆index ◇String,String,Boolean  ◆body ◇Object  ,JSON 
79 indices forcemerge 公式 [params, [callback]] ◆ flush ◇Boolean  ◆ignoreUnavailable ◇Boolean  ◆allowNoIndices ◇Boolean  ◆[expandWildcards=open] ◇String  ◆maxNumSegments ◇Number  ◆onlyExpungeDeletes ◇Boolean  ◆index ◇String,String,Boolean  ◆body ◇Object  ,JSON 
80 indices get 公式 [params, [callback]] ◆ local ◇Boolean  ◆ignoreUnavailable ◇Boolean  ◆allowNoIndices ◇Boolean  ◆[expandWildcards=open] ◇String  ◆flatSettings ◇Boolean  ◆includeDefaults ◇Boolean  ◆masterTimeout ◇DurationString  ◆index ◇String,String,Boolean 
81 indices getAlias 公式 [params, [callback]] ◆ ignoreUnavailable ◇Boolean  ◆allowNoIndices ◇Boolean  ◆[expandWildcards=all] ◇String  ◆local ◇Boolean  ◆index ◇String,String,Boolean  ◆name ◇String,String,Boolean  ◆
82 indices getFieldMapping 公式 [params, [callback]] ◆ includeDefaults ◇Boolean  ◆ignoreUnavailable ◇Boolean  ◆allowNoIndices ◇Boolean  ◆[expandWildcards=open] ◇String  ◆local ◇Boolean  ◆index ◇String,String,Boolean  ◆type ◇String,String,Boolean  ◆fields ◇String,String,Boolean 
83 indices getMapping 公式 [params, [callback]] ◆ ignoreUnavailable ◇Boolean  ◆allowNoIndices ◇Boolean  ◆[expandWildcards=open] ◇String  ◆masterTimeout ◇DurationString  ◆local ◇Boolean  ◆index ◇String,String,Boolean  ◆type ◇String,String,Boolean  ◆
84 indices getSettings 公式 [params, [callback]] ◆ masterTimeout ◇DurationString  ◆ignoreUnavailable ◇Boolean  ◆allowNoIndices ◇Boolean  ◆[expandWildcards=open,closed] ◇String  ◆flatSettings ◇Boolean  ◆local ◇Boolean  ◆includeDefaults ◇Boolean  ◆index ◇String,String,Boolean  ◆name ◇String,String,Boolean 
85 indices getTemplate 公式 [params, [callback]] ◆ flatSettings ◇Boolean  ◆masterTimeout ◇DurationString  ◆local ◇Boolean  ◆name ◇String,String,Boolean 
86 indices getUpgrade 公式 [params, [callback]] ◆ ignoreUnavailable ◇Boolean  ◆allowNoIndices ◇Boolean  ◆[expandWildcards=open] ◇String  ◆index ◇String,String,Boolean 
87 indices open 公式 [params, [callback]] ◆ timeout ◇DurationString  ◆masterTimeout ◇DurationString  ◆ignoreUnavailable ◇Boolean  ◆allowNoIndices ◇Boolean  ◆[expandWildcards=closed] ◇String  ◆waitForActiveShards ◇String  ◆index ◇String,String,Boolean  ◆body ◇Object  ,JSON 
88 indices putAlias 公式 [params, [callback]] ◆ timeout ◇DurationString  ◆masterTimeout ◇DurationString  ◆index ◇String,String,Boolean  ◆name ◇String  ◆body ◇Object  ,JSON 
89 indices putMapping 公式 [params, [callback]] ◆ timeout ◇DurationString  ◆masterTimeout ◇DurationString  ◆ignoreUnavailable ◇Boolean  ◆allowNoIndices ◇Boolean  ◆[expandWildcards=open] ◇String  ◆updateAllTypes ◇Boolean  ◆index ◇String,String,Boolean  ◆type ◇String  ◆body ◇Object  ,JSON 
90 indices putSettings 公式 [params, [callback]] ◆ masterTimeout ◇DurationString  ◆timeout ◇DurationString  ◆preserveExisting ◇Boolean  ◆ignoreUnavailable ◇Boolean  ◆allowNoIndices ◇Boolean  ◆[expandWildcards=open] ◇String  ◆flatSettings ◇Boolean  ◆index ◇String,String,Boolean  ◆body ◇Object  ,JSON 
91 indices putTemplate 公式 [params, [callback]] ◆ order ◇Number  ◆create ◇Boolean  ◆timeout ◇DurationString  ◆masterTimeout ◇DurationString  ◆flatSettings ◇Boolean  ◆name ◇String  ◆body ◇Object  ,JSON 
92 indices recovery 公式 [params, [callback]] ◆ detailed ◇Boolean  ◆activeOnly ◇Boolean  ◆index ◇String,String,Boolean 
93 indices refresh 公式 [params, [callback]] ◆ ignoreUnavailable ◇Boolean  ◆allowNoIndices ◇Boolean  ◆[expandWildcards=open] ◇String  ◆index ◇String,String,Boolean  ◆body ◇Object  ,JSON 
94 indices rollover 公式 [params, [callback]] ◆ timeout ◇DurationString  ◆dryRun ◇Boolean  ◆masterTimeout ◇DurationString  ◆waitForActiveShards ◇String  ◆alias ◇String  ◆newIndex ◇String  ◆body ◇Object  ,JSON 
95 indices segments 公式 [params, [callback]] ◆ ignoreUnavailable ◇Boolean  ◆allowNoIndices ◇Boolean  ◆[expandWildcards=open] ◇String  ◆verbose ◇Boolean  ◆index ◇String,String,Boolean  ◆
96 indices shardStores 公式 [params, [callback]] ◆ status ◇String,String,Boolean  ◆ignoreUnavailable ◇Boolean  ◆allowNoIndices ◇Boolean  ◆[expandWildcards=open] ◇String  ◆index ◇String,String,Boolean  ◆
97 indices shrink 公式 [params, [callback]] ◆ copySettings ◇Boolean  ◆timeout ◇DurationString  ◆masterTimeout ◇DurationString  ◆waitForActiveShards ◇String  ◆index ◇String  ◆target ◇String  ◆body ◇Object  ,JSON 
98 indices split 公式 [params, [callback]] ◆ copySettings ◇Boolean  ◆timeout ◇DurationString  ◆masterTimeout ◇DurationString  ◆waitForActiveShards ◇String  ◆index ◇String  ◆target ◇String  ◆body ◇Object  ,JSON 
99 indices stats 公式 [params, [callback]] ◆ completionFields ◇String,String,Boolean  ◆fielddataFields ◇String,String,Boolean  ◆fields ◇String,String,Boolean  ◆groups ◇String,String,Boolean  ◆[level=indices] ◇String  ◆types ◇String,String,Boolean  ◆includeSegmentFileSizes ◇Boolean  ◆index ◇String,String,Boolean  ◆metric ◇String,String,Boolean 
100 indices updateAliases 公式 [params, [callback]] ◆ timeout ◇DurationString  ◆masterTimeout ◇DurationString  ◆body ◇Object  ,JSON 
101 indices upgrade 公式 [params, [callback]] ◆ allowNoIndices ◇Boolean  ◆[expandWildcards=open] ◇String  ◆ignoreUnavailable ◇Boolean  ◆waitForCompletion ◇Boolean  ◆onlyAncientSegments ◇Boolean  ◆index ◇String,String,Boolean  ◆body ◇Object  ,JSON 
102 indices validateQuery 公式 [params, [callback]] ◆ explain ◇Boolean  ◆ignoreUnavailable ◇Boolean  ◆allowNoIndices ◇Boolean  ◆[expandWildcards=open] ◇String  ◆q ◇String  ◆analyzer ◇String  ◆analyzeWildcard ◇Boolean  ◆[defaultOperator=OR] ◇String  ◆df ◇String  ◆lenient ◇Boolean  ◆rewrite ◇Boolean  ◆allShards ◇Boolean  ◆index ◇String,String,Boolean  ◆type ◇String,String,Boolean  ◆body ◇Object  ,JSON 

ingest, nodes, snapshot, tasks

項番 グループ API ひとこと概要 引数 引数の項目名と型
103 ingest deletePipeline 公式 [params, [callback]] ◆ masterTimeout ◇DurationString  ◆timeout ◇DurationString  ◆id ◇String  ◆body ◇Object  ,JSON 
104 ingest getPipeline 公式 [params, [callback]] ◆ masterTimeout ◇DurationString  ◆id ◇String 
105 ingest processorGrok 公式 [params, [callback]]
106 ingest putPipeline 公式 [params, [callback]] ◆ masterTimeout ◇DurationString  ◆timeout ◇DurationString  ◆id ◇String  ◆body ◇Object  ,JSON 
107 ingest simulate 公式 [params, [callback]] ◆ verbose ◇Boolean  ◆id ◇String  ◆body ◇Object  ,JSON 
108 nodes hotThreads 公式 [params, [callback]] ◆ interval ◇DurationString  ◆snapshots ◇Number  ◆threads ◇Number  ◆ignoreIdleThreads ◇Boolean  ◆type ◇String  ◆timeout ◇DurationString  ◆nodeId ◇String,String,Boolean 
109 nodes info 公式 [params, [callback]] ◆ flatSettings ◇Boolean  ◆timeout ◇DurationString  ◆nodeId ◇String,String,Boolean  ◆metric ◇String,String,Boolean 
110 nodes reloadSecureSettings 公式 [params, [callback]] ◆ timeout ◇DurationString  ◆nodeId ◇String,String,Boolean  ◆body ◇Object  ,JSON 
111 nodes stats 公式 [params, [callback]] ◆ completionFields ◇String,String,Boolean  ◆fielddataFields ◇String,String,Boolean  ◆fields ◇String,String,Boolean  ◆groups ◇Boolean  ◆[level=node] ◇String  ◆types ◇String,String,Boolean  ◆timeout ◇DurationString  ◆includeSegmentFileSizes ◇Boolean  ◆metric ◇String,String,Boolean  ◆indexMetric ◇String,String,Boolean  ◆nodeId ◇String,String,Boolean 
112 nodes usage 公式 [params, [callback]] ◆ timeout ◇DurationString  ◆metric ◇String,String,Boolean  ◆nodeId ◇String,String,Boolean  ◆
113 snapshot create 公式 [params, [callback]] ◆ masterTimeout ◇DurationString  ◆waitForCompletion ◇Boolean  ◆repository ◇String  ◆snapshot ◇String  ◆body ◇Object  ,JSON 
114 snapshot createRepository 公式 [params, [callback]] ◆ masterTimeout ◇DurationString  ◆timeout ◇DurationString  ◆verify ◇Boolean  ◆repository ◇String  ◆body ◇Object  ,JSON 
115 snapshot delete 公式 [params, [callback]] ◆ masterTimeout ◇DurationString  ◆repository ◇String  ◆snapshot ◇String  ◆body ◇Object  ,JSON 
116 snapshot deleteRepository 公式 [params, [callback]] ◆ masterTimeout ◇DurationString  ◆timeout ◇DurationString  ◆repository ◇String,String,Boolean  ◆body ◇Object  ,JSON 
117 snapshot get 公式 [params, [callback]] ◆ masterTimeout ◇DurationString  ◆ignoreUnavailable ◇Boolean  ◆verbose ◇Boolean  ◆repository ◇String  ◆snapshot ◇String,String,Boolean 
118 snapshot getRepository 公式 [params, [callback]] ◆ masterTimeout ◇DurationString  ◆local ◇Boolean  ◆repository ◇String,String,Boolean 
119 snapshot restore 公式 [params, [callback]] ◆ masterTimeout ◇DurationString  ◆waitForCompletion ◇Boolean  ◆repository ◇String  ◆snapshot ◇String  ◆body ◇Object  ,JSON 
120 snapshot status 公式 [params, [callback]] ◆ masterTimeout ◇DurationString  ◆ignoreUnavailable ◇Boolean  ◆repository ◇String  ◆snapshot ◇String,String,Boolean 
121 snapshot verifyRepository 公式 [params, [callback]] ◆ masterTimeout ◇DurationString  ◆timeout ◇DurationString  ◆repository ◇String  ◆body ◇Object  ,JSON 
122 tasks cancel 公式 [params, [callback]] ◆ nodes ◇String,String,Boolean  ◆actions ◇String,String,Boolean  ◆parentTaskId ◇String  ◆taskId ◇String  ◆body ◇Object  ,JSON 
123 tasks get 公式 [params, [callback]] ◆ waitForCompletion ◇Boolean  ◆timeout ◇DurationString  ◆taskId ◇String 
124 tasks list 公式 [params, [callback]] ◆ nodes ◇String,String,Boolean  ◆actions ◇String,String,Boolean  ◆detailed ◇Boolean  ◆parentTaskId ◇String  ◆waitForCompletion ◇Boolean  ◆[groupBy=nodes] ◇String  ◆timeout ◇DurationString 

2018年のマイブックマークリストの棚卸し

2018年にマイWebブラウザでブックマークしたページ(かつブックマークした際に有効そうだと思って、時間がたっても依然として有効だとおもいつつ、一方で、まだしっかり読み込めていないもの*1のおさらいです。

分野は雑食ですが、やや実用テック系多め。

また、12月はアドベントカレンダーが盛りだくさんなので、来年分送りとして、ここには含めていません。 つまり、2018年といいつつ(2017年12月〜2018年11月ぐらい)のものが対象です。

なにやらコンテンツファーマー系と見間違えられてしまいそうな顔つきになってしまいましたが、実際そんな感じのところはありますネ。ググった当たりどころの結果ここに来られた方、思うようなものでなかった場合はごめんなさい。

見てのとおり雑まとめで、グルーピングもなんとなくしかしていません。一言コメントも上についたりしたについたり。

おおよその一覧↓

Statechart

scrapbox.io

フロントエンドの命名や設計の基本と自分の現在の設計

qiita.com

GraphQLとRESTfulについて今日考えてたこと Backend for Usecase/Resourceについて

lacolaco.hatenablog.com

「おむつを買った人はビールも買う」から何を想像するか

anond.hatelabo.jp

Linkedin/WhereHows

※データマネジメントに参考になるかなと思ってBM。

国内における地域SNSの事例数の推移とその背景

www.slideshare.net

生態系とか進化の過程とか、あるいは人の歴史の栄枯盛衰の縮図感を感じさせる。

サブスクリプションビジネスの「ターボ」:コミュニティとカスタマーサクセス

stilldayone.hatenablog.jp

ITIL、CASBも検討――マルチクラウド時代のITサービスマネジメント東京海上日動の選択 (2/2)

www.itmedia.co.jp

水は高いところから低いところに流れるとするなら、この辺は次はこういう流れになるよねという話。

AWSしかやったことない人向け】AWSGCPのネットワークの違いを理解してみよう

www.mpon.me

CDNに動的コンテンツを安全に通すにはどうするべきか

vector.hateblo.jp

Elasticsearch(そのものではないものの)の検索サイトからの連想

「難読住所」という観点

tech.dely.jp

フレーズバンク

地図情報

国土数値情報ダウンロードサービス

ハイフンなのかマイナスなのか

まぎらわしい「アレ」という観点

第35回 社内横断データセット検索システム「Goods」(パート1) (中井悦司)

https://www.school.ctc-g.co.jp/columns/nakai2/nakai235.html

Do people say it

Testing in Production の 3つのフェーズの図 (Ebookから抽出した図)Keizo Tatsumiさんが追加

e5rijun.hatenablog.com

意図的にプログラムの動きをランダムにしてバグを早期発見するテクニックについて

note.mu

結局、いろんなものにおいて、乱択アルゴリズム(randomized algorithm)が最強なのではないかという気持ちをあらたにさせてくれる話。(注:リンク先でそのような主旨でのべてあるわけではありません。私が勝手に連想した所感です。)

結合テストと呼ぶのをやめた話

ソフトウェアの「テスト」ってなんだろうなという問い。

akito0107.hatenablog.com

yoshitake-1201.hatenablog.com

taxa-program.hatenablog.com

Chromeの開発者ツールを使って特定のDOM要素だけスクリーンショットする方法

qiita.com

「TensorFlow.js」公開、Webブラウザ上で機械学習の開発、学習、実行が可能に。WebGL経由でGPUも活用

https://www.publickey1.jp/blog/18/tensorflowjswebwebglgpu.html

こういうのが好きなんです。

よく使うpsqlの便利技10選

masahikosawada.github.io

イマドキのJavaScriptの書き方2018

qiita.com

ざっくり影の練習~~影にも名前あるのしらなかった

名前をつけづらいものにも、どうにか良い名前をつけていくというマイトレンド。

ドラクエで学ぶ音色の時間変化】

これは"教養"としてスバラシイと思う次第。

【Day-8】絶望的なデータを前処理で何とかする。(pandas/sklearn)

【Day-8】絶望的なデータを前処理で何とかする。(pandas/sklearn) - プロクラシスト

これからの、AdWordsのコンバージョン計測方法 3つ

これからの、AdWordsのコンバージョン計測方法 3つ | SEM従事者のためのコミュニティ|SEMカフェ

ソフトウェアアーキテクチャとサッカーにおけるプレーモデル

mattun.hatenablog.com

アジャイル開発にはモデリングや要件定義の工程はあるのか、という問題とその周辺

forza.cocolog-nifty.com

Why Managers Believe Multitasking Works: Long Decision Wait Times

www.jrothman.com

タイム・コンサルタントの日誌から

プロジェクト管理は技術なのかアートなのか。

brevis.exblog.jp

ゲームモデル公開のすゝめ」 | footballista

その他Twitterのつぶやきから

oreno-yuigon.hatenablog.com

proc面白いよね、という話。UNIXの「ファイル哲学」みたいなのも滲み出てるし。

*1:上から目線ですね。スミマセン...

Elasticsearchを少々気の利いたgrepとして使ってみる冬休みの実験

はじめに

具体的にどうという話ではないのですが、一部の界隈では、貧弱な環境でgrepコマンドのみで様々なテキスト調査、下手をすれば人間をAIに見立てたNLPを実施しなければならんということが無いでしょうか。

貧弱な環境の解決にはなりませんが、もし近くに多少自由になる検索エンジンがあるなら、便利な調査アプローチをとることができる、こんな使い方もあるのではということで、書き綴ってみます。

確認はElasticsearch6.4で実施していますが、実験というほど深掘りはしてないので、タイトル負けしているかもしれません。ご容赦ください。

世のgrep調査ニーズの実態は検索エンジンでの検索行為に近いのではないかという仮説

もう少し補足します。

検索エンジンでは、次のような、grepに比べてある種のあいまいな検索に対応しています。

  • 全文検索寄りのマッチング
  • 形態素解析等の日本語処理
  • 統計的手法が織り込まれた特殊なクエリの存在

また、次のように、クエリのシンタックスそのものや検索条件の作り方が、冒頭のような「多少幅のある探し物ニーズ」そのものを表しているため、grepで黒魔術な正規表現等を繰り出す必要がありません。 (もちろん、grepの世界観はそれはそれで素晴らしいのですが...)

  • クエリーのシンタックスが(SQLに慣れた人からすると少し分かりにくい面もあるが)全文検索寄りの用途として見ると分かりやすい*1
  • 複数インデックスの串刺し、複数フィールドを対象に同じ検索条件で検索しやすい
  • 検索条件無しでも検索しやすい

実際にこれらの用途のためにElasticsearchにデータを入れ込むかはともかく、サイト内検索に対応している場合などは、それを利用しても良いのではないでしょうか。

... というところを(実際もっと高度にやっている方達もいるでしょうが)声に出して言ってみたくなったので荒削りながら以下に例としてあげてみました。

丸囲み文字などできれば使って欲しく無い表記をマルッと調査

Webサイトの記事などでは、厳密には規定していないものの、ライティングの都合やもろもろの理由で使用してほしくない文字を後から調査するというような場合もあると思います。*2

例えば、こちらの文字などです。

https://matome.naver.jp/odai/2134260789846270701/2134261371246625403

grepで対応している正規表現ではこれらの飛び地になっている文字を指定するとなると「OR」型の表現*3となりやたらめんどくさいのですが、検索エンジンでの検索クエリだと、ANALAYZERが良くある設定になっていることが前提ですが、

POST car_and_animal/_search
{
    "query" : {
        "match": { "title_ja": "㋐ ㋑ ㋒ ㋓ ㋔ ㋕ ㋖ ㋗ ㋘ ㋙ ㋚ ㋛ ㋜ ㋝ ㋞ ㋟ ㋠ ㋡ ㋢ ㋣ ㋤ ㋥ ㋦ ㋧ ㋨ ㋩ ㋪ ㋫ ㋬ ㋭ ㋮ ㋯ ㋰ ㋱ ㋲ ㋳ ㋴ ㋵ ㋶ ㋷ ㋸ ㋹ ㋺ ㋻ ㋼ ㋽ ㋾" }
    }
}

などとすれば、ここにあげた文字のいずれかを含むドキュメントを検知できます。

同じく、ここでは詳しく書きませんが、Elasticsearchの「should」の「minimum_should_match」も全文検索らしい用法だと思いますし、世のgrep調査で本当はこんな加減で調査できれば良かったのにという例に当てはまるような気がします。

www.elastic.co

www.elastic.co

誤記の可能性があるものを探す

やや変な例ですが、チームに英語ネイティブの人が多く、「ライオン」と表記してほしいところ、「ライアン」としてテキスト登録する人が後を絶ちません。

このような誤記を探します。誤記には稀にですが「ライエン」というものもぼちぼちあり、これも対象としたいです。他にも似たようなものがあるかもしれません。

Elasticsearchで言うと、fuzzyを使います。

https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-fuzzy-query.html

POST car_and_animal/_search
{
  "query": {
    "fuzzy":{ "title_ja":{"value":"ライオン"}}},
}

↓
”ライオン”そのものもだが、"ライエン"や"ライアン"などが存在するか確認できる。


fuzziness、prefix_length、max_expansions、transpositionsといった曖昧さをコントロールするパラメータもあります。

パラメータで加減できるところも含めて、grepなどで正規表現で同じことをしようとするとかなり難しいですね。 (その分ヒットしてほしくないものも引き連れてヒットするトレードオフはありますが...。)

Term suggesterでも(インデックスでsuggest対象になっているかの手間はありますが)似たような利用方法が可能だと思います。

同じ意味を表す用語が複数の表記にバラついているものがないか

前項のfuzzyでも炙り出せる場合がありますが、ここでは別の方法です。

「渡邊」と「渡部」は、「渡辺」に寄せたいが、これをし損ねているものがあるか...というのが一番端的な例です。

アナライザー(kuromoji)の設定がそれなりになされているとして、その上で、

例えば、

POST car_and_animal/_search
{
    "query" : {
      "bool": {
        "must": {
          "match": { "content.my_analyzed": "ターゲットとしているワード(これに統一したいもの)" }
        },
        "must_not": {
          "match": { "content.my_not_analyzed": "ターゲットとしているワード(これに統一したいもの)" }
        }
      }
    }
}

というクエリで検索します。

ここで、content.my_analyzedとcontent.my_not_analyzedは、それぞれ、データソースのドキュメントに対し、前者が規定のアナライズがされているもの、後者がされていないものになります。

上記に書けた範囲の仕込みだと少し無理がある例かもしれませんが、ちょっとごまかし気味にアイディアの意図を説明すると、標準化すると同じものになるが、実際のドキュメント中は意図したどおりに統一した表記になっていない...というものを検索して探しているといるというイメージになります。

もっと単純に、次のような素直に調査する案も当然あります。

POST car_and_animal/_search
{
    "query" : {
        "match": { "title_ja": "ライオン" }
    },
    "highlight" : {
        "fields" : {
            "title_ja" : {"type" : "plain"}
        }
    }
}


↓
hits(一部)

        "title_ja": [
            "<em>ライオン</em>は百獣の王で..."
          ]

でドキュメントが帰ってくるか、また、具体的にマッチした部分をhighlightで識別しやすいようにするというやり方がありそうです。

https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-highlighting.html

※highlightはもともとは検索結果をユーザー向けに見やすくするものかと思いますが、この類の調査やデバッグに利用するという使い方も実は便利そうです。 独自のタグで囲んでおけば、結果をそのまま後続の別の調査で取り扱いやすいと思います。

ドキュメントがkuromoji辞書に無い言葉を使っていないか(≒できるだけ標準的・平易で無難な言い回しをしているか/ミーハーにならないように新語は控えめか。)

kuromojiの辞書のありようを逆手に取って、ライティングが一定の範囲に収まっているかを発見的に確認するという発想です。

次のような、未知語と名詞関連以外を除去するようなアナライザの設定を行います。

      "my_kuromoji": ....
        (中略)   
       "filter":[
            "my_filter"
       ]
       (中略)
      "filter":{
        "my_filter":{
          "type":"kuromoji_part_of_speech",
          "stoptags" :[
                未知語と名詞関連以外は除去
       ※名詞関連は多少取捨選択した方が良いかもしれないが、ここでは説明を簡単にするため名詞は全般的に残すこととした。
          ]
      }}

作成した文書をアナライズします。

POST grep/_analyze
{
  "analyzer": "my_kuromoji",
    "text": "どこべろずんちょは大人しいが怒らせると襲いかかってくる"
 }

↓ トークンの一覧が返ってきます。上述の設定からいうとドキュメント中の未知語と名詞の一覧が返ってきます。

{
  "tokens": [
    {
      "token": "どこ",
      "start_offset": 0,
      "end_offset": 2,
      "type": "word",
      "position": 0
    },
    {
      "token": "べろ",
      "start_offset": 2,
      "end_offset": 4,
      "type": "word",
      "position": 1
    },
    {
      "token": "ちょ",
      "start_offset": 6,
      "end_offset": 8,
      "type": "word",
      "position": 3
    }
  ]
}

返ってきたトークンの件数やワードに対して仮の閾値と比較して、数が多いようであればアラームをあげるというような仕組みが考えられると思います。

他にもありそう...

以下は、ちゃんと考えていませんが、こんなものもうまくやれば生のgrepよりいろいろ気の利いたことができるかも(ただし、ANALYZERの多少トリッキーな助けも必要かも...)な例としてありそうかなというところをキーワードだけですがあげてみました。ちょっと盛ってるかもですが...

表記ゆれ日付の記述を探す

全半角混在などにもある程度強いため。

てにおはがおかしい(かもしれない)ものを探す/文体のおおよその統一

フレーズ検索系のクエリの邪道(?)な使い方や、char_filterで大胆な名寄せ相当および先述のkuromoji_part_of_speechでの特定の品詞除外を組み合わせると文章の骨格が抜き出せる、あるいは外骨格の方を残すことで、てにおはがおかしいものを探したり、文体が叙述式にある程度統一されているかの確認。

なんとなくこんな表現の範囲におさまってそうかのチェック

略。前項と発想は同じ。この記事のアウトラインを考えた時には別にしようとして分けてみたものの、事例を忘れてしまったので、無理に分けなくても良かったかも...

無駄なコピペコード、類似コードの検索

More Like Thisか、フレーズ検索をぶち込むかというところ。

腰を据えてやるなら、リファクタリングツールを使った方が良いでしょうが...

プログラムっぽい記述

いわゆるググラビリティが低いプログラムの記述の横並び調査など。

エラーログの本格分析前の下調べ

定型フォーマットでしかも絶えず流れ続けるようなログは、近いところで言うと例えばkibanaで楽しく分析やML的な手法で検知できるのだと思います。

ただ、javaスタックトレースなど、明らかに異常が発生して今まで出なかったようなエラーログが1GB吐き出された...のような場合に、膨大なログテキストの中から、まずは注目すべき箇所をあぶり出すにあたって、マッチングのクエリを駆使するとログを読み解く手がかりが得られるのではと考えています。

時系列分析の前のPoCoC

PoCoCはこの場限りの造語です。PoC活動自体のProofです。

前項で言っていることと近い話で、例えばkibanaで時系列分析(のPoC)をする前に、雑にデータをインデックスに取り込んでおき、ここまであげたような検索エンジンの使い方等を組み合わせて、そもそもどんなログフォーマットやデータ内容が多数決的にありそうなのか、kibanaへの取り込み設計の方向性を見定める...というようなところに使えないかという考えでここにあげてみました。

four-letter wordのチェック

他と毛色がやや違いますが、作成した文書でNGワードを使用していないかのチェック...というようなケースにおいて、RDBでの対応表みたいなものの厳格な管理をしなくとも、NGワードNGワードの表記揺れのワードを一つのドキュメントに気まぐれにつっこんでやり、このドキュメントに対して、OR検索をしたり、More Like Thisクエリーで検索をして、ヒットするかどうかで、ほどほどのNGワードチェックができると考えています。

さいごに

実のところ、この類の調査がどこまでリアルな例かはともかく、例えばとある検索サイトやサイト内検索では(仕様のシンプル化の方針などにより)あえて使用しなかったElasticsearchのリッチな検索クエリの使い方を掘り下げる良い思考実験となりました。 (あくまで私にとっては...ですが。)

また、上記の例では例のための例ということと私のスキルの都合で、アナライザーのプラグインを自作する領域までは踏み込みませんでしたが、軽微な文字変換のプラグインを自作すると、文字どおりプラグイン的に、少々気の利いたgrepパターンを積み上げていくこともできそうです。

このブログの片隅でもまとめることで、Elasticsearchの素晴らしい機能をしゃぶりつくせる小さなきっかけとなるようなものがあれば、改めて書き出して見たいとおもいます。

以上

*1:分かりやすいかどうかの議論はあると思いますが、各種検索条件に対応させるためにパースできるようなシンタックスとして成り立たせる必要があるので現在の複雑さ(?)は最低限必要な範囲だと思います。

*2:このブログは表記揺れがめちゃくちゃ多いのは自覚しております。

*3: ㋐ |㋑|...みたいなやつ。

Term Vectors、Multi termvectorsでドキュメント中の単語出現回数を確認(Elasticsearch)

Elasticsearchには、本分である検索もさることながらドキュメント(テキスト)に関する調査も可能です。

調査も...というか、Elasticsearchのような検索エンジンテキストマイニングの情報技術の結集かと思いますので、テキストマイニングで出てくるような話題に関連するような数値等の確認ができそうな気がします。

確かにその手の基本APIがいくつかありそうでして、そのうちの一つが、Term Vectorsと呼ばれるものです。

Term Vectorsを使うと指定のドキュメント中の(ANALYZE後の)単語出現回数の分布を確認できます。

f:id:azotar:20181225002557p:plain

www.elastic.co

また、Multi termvectorsは、ドキュメントを複数指定できるバージョンです。

これらTerm Vectorsについて、通常のワードカウンターと違って、私が面白いなと思うところは次のとおりです。

  • ANALYZE後の件数カウンターになっている。もちろんmapping設定次第なものの、形態素解析や原形化後のカウントになっている。この流れでstopワード等はカウント対象外にできるので、出現回数にノイズが混ざりにくい。
  • 転置インデックスの生ダンプに相当するデータが取得できる。
  • Elasticsearch(lucene)に付属(当たり前ですが...)。
  • Elasticsearchに付属なので、Elasticsearchを扱っているアプリの中で使いやすいかもしれない。 上記などの延長線上で、いろいろ遊べる(かもしれない)。(ややイレギュラーな使い方かもしれないので性能等の考慮は必要かもしれませんが。)

ということでなかなか面白いでしょう?ということで、ここでは基本的な使い方のマイリマインダです。

Term Vector使い方(要点)

具体的なコールの仕方の一例は、

GET インデックス名/_doc/対象ドキュメントのID/_termvectors?fields=対象フィールド&filter_path=*.*.*.*.tokens.position&field_statistics=false
{
  "filter":{
     "min_term_freq" : 5
  }
}

※ Elasticsearch 6.4 で確認

ここでは応答イメージは割愛しますが、各ワードごとに、term_freqというフィールドが返ってきて、これがこのワードの出現回数です。

なお、上記のコール例でのクエリパラメータは、私のオススメのものにして、値を絞り込んでいます。

が、正確にはちょいと冗長です。ここではクエリパラーメーターでどんなものが指定できるかを暗示する意味でそのようにしています。

また、ここでは、filterに、min_term_ferqを5に設定し、出現回数が5回以上のものに絞っています。 (max_term_freqもあります。)

他にも絞り込み条件として、

  • max_num_terms: 何件まで回答を返すか(デフォルトは25)
  • max_doc_freq : 他ドキュメントも含めてこの単語が出現するドキュメントの数がこれを超えるようなものは回答に含めない。
  • max_word_length : 何文字までのワードを回答に含めるか。

があるものの、データの様子を見るのに使うのは1つめぐらいで、他はスクロールで流れてしまう時に、文字通り回答件数を絞りたい時ぐらいかなと思いました。

また、上記は、「max_XXX」としていますが、対になる「min_XXX」も指定可能です。

Tipsなど

artificialなtextをインプットにできる

実際に登録されているドキュメント(ドキュメントID)ではなく、Term Vectorsのクエリにdocフィールドでテキストを指定すると、このテキストに対してワードの出現回数を解析してくれます。

GET /twitter/_doc/_termvectors?field_statistics=false&term_statistics=false
{
  "doc" : {
    "content_ja" : "となりの客はよく柿食う客だ。隣の客は良く柿を食べる客だ。トナリのお客様はよーく柿を食った客だった。"
  }
}

//  ※ content_jaで指定したテキストに対してワードの出現頻度が返ってくる。

なお、上記では、content_jaがtwitterインデックスに実際に存在するフィールド名となっています。

この方式では、インデックスには存在しない、便宜上のテキストを食わせることができますが、ぶつけるインデックスには、この例でいうと、content_jaフィールドに値を持つ実際のデータが存在している必要があります。 (公式Rでもそれっぽいことが書いてあるのですが、おそらく後述の「統計情報」との兼ね合いの仕様ではないかと思います。)

Multi termvectors

複数のドキュメントを一括で指定できます。

クエリのJSONボディ中のdocsプロパティに、「_id」や「doc」プロパティで指定するとこれらのtermvectorが返ってきます。

docsプロパティは配列なので、ここに必要分だけ、ドキュメントを指定することになります。

GET /twitter/_doc/_mtermvectors
{
   "docs": [
      {
         "_id": "1",
           "fields" : ["content_ja"]
      },
      {
         "doc" : {
            "fullname_ja" : "部屋とTシャツとたわし"
         }
      }
   ]
}
# mappingsでの「store:true」設定

これにより、payloadの値が取得できるようになる。

# Per-field analyzer

省略

追伸:Term statics、Field statistics(自信がないので追伸に記述)

上記では省略しましたが(その一方でオススメのクエリパラメーターではそれとなく示唆しましたが)、Term statics、Field statistics という出現回数の統計情報も取得できます。

おおよそのイメージとしては次のようになっています。

f:id:azotar:20181225002802p:plain

Term information(再掲)

統計情報の前に少しだけ寄り道します。

本編では、出現回数に絞って示しましたが、単語のリストとともに出現回数が返ってきます。 他にも、このワード(term)についての数値が示されています。次のようなものです。

  • term frequency(term_freq) : 出現回数(A)
  • term positions : 出現場所
  • start and end offsets: オフセット
  • term payloads : ペイロード

統計値関連

出現回数にまつわる関連統計数値(インデックス全体での串刺しなどでの集計)も取得できます。(クエリのパラメータを設定すれば、取得されます。)

非常に面白い情報なのですが、公式Rにもそれとなく書いてありますが、「The term and field statistics are not accurate.」です。

おそらく、次↓の図のような各種値が取得できるように思われるのですが、

f:id:azotar:20181225002802p:plain

以下、公式Rの読み違えもあったらごめんなさいですが、公式Rの説明と、termvectorsの返り値の値の文字面を見比べておそらくこういうことかなということでメモってみています。

Term statics

このドキュメントが格納されているインデックス全体の次のような統計数値が返ってくるようです。

  • total term frequency(ttf) : ドキュメント全体のこの単語の出現回数 : (A) の該当ドキュメント分の合計
  • document frequency(doc_freq) : ドキュメント全体のこの単語を含むドキュメント数 (B)

Field statistics

検索対象のフィールドに関する、このドキュメントが格納されているインデックス全体の統計数値が返ってきます。

  • document count(doc_count) : このフィールドを持つドキュメント数
  • sum of document frequencies(sum_doc_freq) : (B)のなんらかのドキュメント件数にまつわるなんらかの合計
  • sum of total term frequencies(sum_ttf) : 全ワードに関する(2)の合計

kuromojiプラグインのkuromoji_part_of_speechのspeechの一覧

私はどちらかといえば、Elasticsearchのkuromojiプラグインのkuromoji_part_of_speech についてはデフォルトのままで(つまり、stoptagsの設定は特に行わない)で良いのではないかと考えている派です。

が、当然ですが、案件ややりたいことによる訳で、なにかとコンパクトにするために名詞だけでいいやといった場合には、除外の設定を行うことになると思います。

この時、品詞の除外の設定は、除外するものを全て並べる必要があるのと、設定上は、名詞でいうと30種類サブ分類にあたるものがあるので、最初の一発とはいえ、多少試行錯誤が必要な場合は少し煩わしいです。

ということで、

github.com

から抜き出した、kuromojiのデフォルトのstoptagsの設定を俯瞰しやすいように表にまとめました。

また、ついでに、名詞を残すとしたら、動詞・形容詞・副詞といった助詞等のデフォルト除外および名詞を除外したものを残すとしたらでチェックをつけました。

上記のgithubの「#△」以外、「#」を含まない行を抜き出せばすぐ抜き出せる範囲ですが、Elasticsearchのsettings.analysis.filter.your_filter_name.stoptagsに貼り付ける手間を少し軽減できるかなと思って書き出してみました。

コピペ間違いなどありましたらごめんなさい。

項番 大分類 (A)デフォルト除外 (B)名詞のみ (C)デフォルト除外と名詞除外 フィルター
1 その他 x x x "その他-間投",
2 その他 "その他",
3 その他 x x x "フィラー",
4 その他 x "感動詞",
5 記号 "記号-アルファベット",
6 記号 x x x "記号-一般",
7 記号 x x x "記号-括弧開",
8 記号 x x x "記号-括弧閉",
9 記号 x x x "記号-句点",
10 記号 x x x "記号-空白",
11 記号 x x x "記号-読点",
12 記号 x x x "記号",
13 形容詞 x "形容詞-自立",
14 形容詞 x "形容詞-接尾",
15 形容詞 x "形容詞-非自立",
16 形容詞 x "形容詞",
17 語断片 x "語断片",
18 助詞 x x x "助詞-格助詞-一般",
19 助詞 x x x "助詞-格助詞-引用",
20 助詞 x x x "助詞-格助詞-連語",
項番 大分類 デフォルト除外 名詞のみ デフォルト除外と名詞除外 フィルター
21 助詞 x x x "助詞-格助詞",
22 助詞 x x x "助詞-間投助詞",
23 助詞 x x x "助詞-係助詞",
24 助詞 x x x "助詞-終助詞",
25 助詞 x x x "助詞-接続助詞",
26 助詞 x x x "助詞-特殊",
27 助詞 x x x "助詞-副詞化",
28 助詞 x x x "助詞-副助詞",
29 助詞 x x x "助詞-副助詞/並立助詞/終助詞",
30 助詞 x x x "助詞-並立助詞",
31 助詞 x x x "助詞-連体化",
32 助詞 x x x "助詞",
33 助動詞 x x x "助動詞",
34 接続詞 x x x "接続詞",
35 接頭詞 x "接頭詞-形容詞接続",
36 接頭詞 x "接頭詞-数接続",
37 接頭詞 x "接頭詞-動詞接続",
38 接頭詞 x "接頭詞-名詞接続",
39 接頭詞 x "接頭詞",
40 動詞 x "動詞-自立",
項番 大分類 デフォルト除外 名詞のみ デフォルト除外と名詞除外 フィルター
41 動詞 x "動詞-接尾",
42 動詞 x "動詞-非自立",
43 動詞 x "動詞",
44 非言語音 x x x "非言語音",
45 副詞 x "副詞-一般",
46 副詞 x "副詞-助詞類接続",
47 副詞 x "副詞",
48 未知語 "未知語",
49 名詞 x "名詞-サ変接続",
50 名詞 x "名詞-ナイ形容詞語幹",
51 名詞 x "名詞-一般",
52 名詞 x "名詞-引用文字列",
53 名詞 x "名詞-形容動詞語幹",
54 名詞 x "名詞-固有名詞-一般",
55 名詞 x "名詞-固有名詞-人名-一般",
56 名詞 x "名詞-固有名詞-人名-姓",
57 名詞 x "名詞-固有名詞-人名-名",
58 名詞 x "名詞-固有名詞-人名",
59 名詞 x "名詞-固有名詞-組織",
60 名詞 x "名詞-固有名詞-地域-一般",
項番 大分類 デフォルト除外 名詞のみ デフォルト除外と名詞除外 フィルター
61 名詞 x "名詞-固有名詞-地域-国",
62 名詞 x "名詞-固有名詞-地域",
63 名詞 x "名詞-固有名詞",
64 名詞 x "名詞-数",
65 名詞 x "名詞-接続詞的",
66 名詞 x "名詞-接尾-サ変接続",
67 名詞 x "名詞-接尾-一般",
68 名詞 x "名詞-接尾-形容動詞語幹",
69 名詞 x "名詞-接尾-助数詞",
70 名詞 x "名詞-接尾-助動詞語幹",
71 名詞 x "名詞-接尾-人名",
72 名詞 x "名詞-接尾-地域",
73 名詞 x "名詞-接尾-特殊",
74 名詞 x "名詞-接尾-副詞可能",
75 名詞 x "名詞-接尾",
76 名詞 x "名詞-代名詞-一般",
77 名詞 x "名詞-代名詞-縮約",
78 名詞 x "名詞-代名詞",
79 名詞 x "名詞-動詞非自立的",
80 名詞 x "名詞-特殊-助動詞語幹",
81 名詞 x "名詞-特殊",
82 名詞 x "名詞-非自立-一般",
83 名詞 x "名詞-非自立-形容動詞語幹",
84 名詞 x "名詞-非自立-助動詞語幹",
85 名詞 x "名詞-非自立-副詞可能",
86 名詞 x "名詞-非自立",
87 名詞 x "名詞-副詞可能",
88 名詞 x "名詞",
89 連体詞 x x "連体詞",

(B) 名詞のみ(コピペ用あえての1行バージョン)

"stoptags": [
"その他-間投", "フィラー", "感動詞",    "記号-一般",    "記号-括弧開", "記号-括弧閉", "記号-句点",    "記号-空白",    "記号-読点",    "記号",   "形容詞-自立", "形容詞-接尾", "形容詞-非自立",  "形容詞",    "語断片",    "助詞-格助詞-一般",  "助詞-格助詞-引用",  "助詞-格助詞-連語",  "助詞-格助詞", "助詞-間投助詞",  "助詞-係助詞", "助詞-終助詞", "助詞-接続助詞",  "助詞-特殊",    "助詞-副詞化", "助詞-副助詞", "助詞-副助詞/並立助詞/終助詞",  "助詞-並立助詞",  "助詞-連体化", "助詞",   "助動詞",    "接続詞",    "接頭詞-形容詞接続",    "接頭詞-数接続",  "接頭詞-動詞接続",   "接頭詞-名詞接続",   "接頭詞",    "動詞-自立",    "動詞-接尾",    "動詞-非自立", "動詞",   "非言語音", "副詞-一般",    "副詞-助詞類接続",   "副詞",   "連体詞"
]

(C)デフォルト除外と名詞除外

"stoptags":[
"その他-間投", "フィラー", "記号-一般",    "記号-括弧開", "記号-括弧閉", "記号-句点",    "記号-空白",    "記号-読点",    "記号",   "助詞-格助詞-一般",  "助詞-格助詞-引用",  "助詞-格助詞-連語",  "助詞-格助詞", "助詞-間投助詞",  "助詞-係助詞", "助詞-終助詞", "助詞-接続助詞",  "助詞-特殊",    "助詞-副詞化", "助詞-副助詞", "助詞-副助詞/並立助詞/終助詞",  "助詞-並立助詞",  "助詞-連体化", "助詞",   "助動詞",    "接続詞",    "非言語音", "名詞-サ変接続",  "名詞-ナイ形容詞語幹", "名詞-一般",    "名詞-引用文字列",   "名詞-形容動詞語幹",    "名詞-固有名詞-一般",   "名詞-固有名詞-人名-一般",    "名詞-固有名詞-人名-姓",   "名詞-固有名詞-人名-名",   "名詞-固有名詞-人名",   "名詞-固有名詞-組織",   "名詞-固有名詞-地域-一般",    "名詞-固有名詞-地域-国",   "名詞-固有名詞-地域",   "名詞-固有名詞",  "名詞-数",   "名詞-接続詞的",  "名詞-接尾-サ変接続",   "名詞-接尾-一般", "名詞-接尾-形容動詞語幹", "名詞-接尾-助数詞",  "名詞-接尾-助動詞語幹",    "名詞-接尾-人名", "名詞-接尾-地域", "名詞-接尾-特殊", "名詞-接尾-副詞可能",   "名詞-接尾",    "名詞-代名詞-一般",  "名詞-代名詞-縮約",  "名詞-代名詞", "名詞-動詞非自立的",    "名詞-特殊-助動詞語幹",    "名詞-特殊",    "名詞-非自立-一般",  "名詞-非自立-形容動詞語幹",  "名詞-非自立-助動詞語幹", "名詞-非自立-副詞可能",    "名詞-非自立", "名詞-副詞可能",  "名詞",   "連体詞"
]

参考リンク

参考にさせていただきました。

qiita.com

びじフレ

MBA的な世界で出てくる様々なビジネスフレームワークですが、どうもすっきりしません。

私が成功した経営者や経営者でなくともMBAを修めた立場でであれば良いのですが、残念ながらそうではないので小声で言うと、多分本来の経営においてはさほど役に立たなそうな気がします。

ただ、本当に役立たないかというとそうでもなくて、これまた多分ですが、事後分析や、逆に形式は問わずももともと確固たる信念や言語化するのが難しいアイディアやビジネスプラン、戦略の案がある場合に、それを「点検」する際に参考にするというのが良い使い方のような気がします。

また、これらのビジネスフレームワークですが、ことをややこしくしているのが使い所がはっきりしないことのように思います。

何かの試験問題や演習ならともかく、現場で、さて3C分析をしてみましょうと言われて、3つの空欄を埋めようとして手が止まりませんか。

手が止まるのはいろいろ理由があると思いますが、ひとつにはシンプルに目の付け所とそれを可視化する方法として使おうと思っているフレームワークが適していない、またひとつはそのフレームワークを使うにあたって事前に調査しておいた方が良い事項や素材が揃っていないというようなところがあると思います。

ということで、自分の中での咀嚼もかねて、有名フレームワークの使うタイミングを整理してみました。

ただただ一覧が出て来るのも辛いし自分でもおもしろくないので、(怪しい)業務改善コンサルタントとして召喚され、主要なフレームワークを並び立てるだけで現状の問題やビジネス上の課題をあきらかにするとともに、新たな(ただし、根拠に足る)事業戦略とともに実際に機能するプランを立案する... という夢のようなストーリーでフレームワーク間の順々に適用するとしてみました。

f:id:azotar:20181220010010p:plain f:id:azotar:20181220010015p:plain f:id:azotar:20181220010023p:plain

多少無理があるところもあると思いますが、適用順序とストーリーがあると、白紙だと記憶しづらいものも記憶に定着するのではという期待をこめております。

1. 財務三表

財務三表は普通にながめて見ましょう。

ここでは深掘りしていませんが、数字で大きさを図る・感じるのは重要だと思います。 (私がこれらの情報をもとに目利きができる・得意だとはひとことも申しておりません。)

他にも、生産性や効率性、収益性、安全性といったことを確認しましょう。

確認の際は、同業他社のデータがあると望ましい... というか同業他社と比べるしか、素人にはこの値がどれほどのものか分からないので注意しましょう。

2. バリューチェーン

バリューチェーンを確認しましょう。

価値を生み出しているのはどの工程か。貢献しているのはどこか。

主活動に目がいきがちですが、支援活動も(分析中毒にならない範囲で)見逃さないで。

チェーンのつながりこそが価値の源泉になっているかもしれません。

というかバリューチェーン分析の目的は本来そちらかな。 (業務フローなどを描いて分析すると、バリューがそっちのけになる場合があるように思います。分析として使うといいながら、あなたの会社は(うちの会社は)このバリューチェーンこそがポイントです!と言い切るための挿絵としての使い方がバリューチェーンの本質のような気がしてきました。)

ちなみに、「支援活動」の方が明らかにボリュームが大きいような営みになっている場合は大企業病になっている可能性があります。

3. ビジネスモデル

ビジネスモデルがどのタイプか確認しましょう。

あえて付け焼き刃ですが、ビジネスモデルの詳細な分析もさることながら、あえてカタログ的にものを見て、どの勝ちパターンを志向しているのかを言語化するというのが効率的な場合があるように思います。

https://www.amazon.co.jp/dp/4798146889 ビジネスモデルナビゲーター

4. 3C

3Cを可視化しましょう。

なお、どこかで見たことの受け売りですが、過去と現在の3Cを書き出して「変化」をみることで、3Cフレームで本来あぶり出したかったことが見える化されます。

逆に言うと、よくある3つの丸のベン図みたいな単品の3Cだと、それが正しい分類だったとしても、これは本当にCompanyの分類で良いのかねみたいなズレた話になるような気がしますので、3Cの本来の目的にそうように「変化」を示すのが有効だと思います。

3Cをまとめていると自ずと、その情報収集や考察の流れで、VRIOらしきものがおぼろげながら見えてきます(かもしれません)。

5. SWOT

ここではそれを横目に、SWOTの強み弱み機会脅威を埋めてみます。

戦略立案というよりは、まず現状分析です。

強みに関連するのはVRIOですね。

6. PEST

SWOTの機会・脅威に関するところでは、PESTの観点でものを見てみると良いと思います。

7. クロスSWOT

SWOTを戦略が噛み合うように、クロスSWOTに組み直します。

ここで、先の3Cをふりかえりつつ、次のような古典をあたまに浮かべてみましょう。

整合性のチェックやうまくいきそうなクロスSWOTになっているか確認するのが良いと思います。

8. ポーターの3つの基本戦略

コストリーダーシップ、差別化、集中に照らし合わせてみる

9. コトラーの競争地位戦略

リーダー、チャレンジャー、ニッチャー、フォロワーそれぞれと、 フルライン戦略、差別化、隙間製品の徹底、リーダーのマネ と言われる定石との兼ね合い

10. PPM

続いて、具体的な事業の展開を考えます。

現在の事業や製品を棚卸しして、どのポジションなのか確認します。

拡大か撤退か、はたまた重要な空白領域に新たな製品を投入するのか思考します。

11. イノベーター理論、プロダクトライフサイクル

PPMで市場成長率とシェアのどの位置に位置するかは、感覚的にもわかるかもしれませんが、イノベーター理論やプロダクトライフサイクルのフレームを知っていると定性的なりに多少客観視できるかもしれません。

12. アンゾフの事業マトリクス

事業の拡大については、製品の市場開拓なのか多角化なのか、市場において顧客への浸透なのか新商品開発なのか、これらの組み合わせなのか相性を考えて行動しましょう。

なお、図では特にふれていませんが、ブルーオーシャン戦略を念頭におきましょう。

13. STP分析

具体的な戦術に落とし込んでいきます。

が、ここでもまた分析です(笑)。

S: セグメンテーション

T: ターゲッティング

P: ポジショニング

14. 顧客グリッド

前項のターゲッティングは、顧客グリッドを使って分類するとともに、定石にしたがってアプローチを決めると良いでしょう。

顧客グリッドは、顧客収益性とロイヤリティの軸で顧客タイプを6種に分類したものです。

https://www.emotion-tech.co.jp/resource/2015/the-three-sacred-treasures

15. 再びコトラーとポーターの2大巨頭 〜コストリーダーシップ

市場開拓や新商品開発の方向性ではなく、既存製品を重視する場合、ポーターの3つの基本戦略のコストリーダーシップに注目します。

ここでは、効率化の方向性になるので、最近だと7つの無駄(加工、在庫、作りすぎ、手持ち、動作、運搬、不良のムダ)に注目することになりそうですが、少しレイヤが低くなるかもしれません。

16. 差別化 →4C(買い手)、4P(売り手)

差別化戦略を掘り下げる場合は、4C、4P分析を行います。

歴史的には、4Pから4Cという流れのようですが、分析が目的ではなくて、差別化戦略の点検という意味では、両方使えば良いような気がします。

また、VRIOが成立しているか/成立しうるか確認しましょう。

この時、競争優位の源泉(差別化、コスト優位、イノベーション)が確保できそうかも点検した方が良いと思います。

17. AIDMA・AISAS

4P、4Cの流通(Place)、販促(Promotion)には具体的なPR活動もさることながら、AIDMA、AISASを意識しましょう。

せまいところで戦っていませんか?

Promotionという意味では、顧客グリッドを振り返るのも有効でしょう。

つかれてきたのでここまで

続きとしては、

ビジネスモデルキャンバス、リーンキャンバスのフレームワーク

経営資源のヒトモノカネ、時間、情報。

経営視点に話を戻すなら、バランススコアカード(BSC)での財務、顧客、業務プロセス、学習と成長... と話は続きます。

が、疲れてきましたのでここまでにします*1

*1:実際は、この辺から先にストーリーづけるのは無理が出てきたというのもあります。

続:ナレッジインデックスの有効性のゆるい確認、 続:検索練習用のサンプルデータのインポート(ElasticsearchのSignificant text )

はじめに

この記事は、

itdepends.hateblo.jp

のおおよその続編。

また、

itdepends.hateblo.jp

itdepends.hateblo.jp

の親戚記事です。

一言で言うと、「ナレッジインデックス(仮称)」というものを考えて、こいつの有効性を(実証は難しいものの)いくつか試してみるというものになります。

使用したElasticsearchのバージョンは6.4です。

アンサイクロペディアwikipediaから「東京関係」の解説記事を抜き出した上、Elasticsearchにまるっと放り込んで(これが別記事でナレッジインデックスと呼んでいるもの)、東京の地理に関する検索語(例: 上野)に関連するワードがが得られるかやって見るというものです。 (ここだけ見ると、Significant t... の当たり前の機能じゃん...ですが。)

wikipediaのデータをElasticsearchにインポートする正攻法は他のブログで有用な記事を皆さんが作成されています。この記事はそれらと少し趣がことなりますので、Google検索等で流れついた方は、ご容赦ください。また、自分の主張を卑下するわけではありませんが、この記事で言うナレッジインデックス(仮称)は少々名前負けしています。

アンサイクロペディアから東京エリアナレッジインデックス(仮称)生成

1) mapping設定します。

PUT your_index5
{
  "mappings": {
    "_doc": {
      "dynamic_templates": [
        {
          "dtmpl": {
            "match_mapping_type": "*",
            "match": "*_ja",
            "mapping": {
              "analyzer": "my_kuromoji",
              "fielddata":true
            }
          }
        }
      ]
    }
  },
  "settings": {
    "analysis": {
      "analyzer": {
        "my_kuromoji": {
          "type": "custom",
          "tokenizer": "kuromoji_tokenizer",
          "mode": "search",
          "char_filter": [
            "icu_normalizer",
            "kuromoji_iteration_mark"
          ],
          "filter": [
            "kuromoji_baseform",
            "kuromoji_part_of_speech",
            "ja_stop",
            "lowercase",
            "kuromoji_number",
            "kuromoji_stemmer"
          ]
        }
      }
    }
  }
}


2) アンサイクロペディアのデータをダウンロードします。

http://download.uncyclomedia.org/

http://download.uncyclomedia.org/ja-wiki.xml.gz

展開すると、12Gぐらいありました。

3) indexに入れるための、東京に関するデータを抽出します。

データを抜き出すためのツールを作成しました。

この、

# encoding: utf-8

# wiki_simple_ext.rb : 

#   アンサイクロペディアのデータの地域の説明はおおよそ次のようなXMLのスキーマになっているようだ。
#   なので目的の情報を持ってそうな、*印部分の要素を1行ずつ処理する。
#
# * page
# * title
# *   revision
# *      {東京} もしくは {XXX}
#     revision
#        {東京} もしくは {XXX}
#     ...

entry = ""
tokyo = false
revision = 0
STDIN.each_line do |l|
  if l.match(/<page>/)  then
    puts entry + "</page>" if tokyo == true
    entry = ""
    tokyo = false
    revision = 0
  end

  revision = revision + 1 if l.match(/<revision>/)
  entry = entry + l if revision <= 1
  tokyo = true if l.match(/\{\{(東京|東京都区部|東京都の鉄道駅|東京都の自治体|大阪)\}\}/)
end

puts entry + "</page>" if tokyo == true

を wiki_simple_ext.rbとして、

cat ja-wiki.xml | ruby wiki_simple_ext.rb  > ja-wiki-tokyo.xml

で、ja-wiki-tokyo.xmlを出力して*1

 export META='{"index":{}}'; cat ja-wiki-tokyo.xml | tr '"' ' ' | tr '\n' ' ' | tr '{' ' ' | tr '}' ' ' | sed 's/<\/page>/<\/page>"\'$'\n/g' |  sed 's/<title>/"title_ja":"/' | sed 's/<\/title>/","content_kw":"/g' | sed 's/<[^>]*>//g' | sed '/^ *$/d' |  ruby -nle 'puts ENV["META"] + "\n{" + $_ + "}"'   > ja_wiki_tokyo.json

で、バルクロードに向いた次の形式のJSONファイルにしてやります。

{"index":{}}
{       "title_ja":"葛飾区", "content_ja":"XXXXXXXXXX" }

4) バルクロード

ja_wiki_tokyo.json を次のコマンドでバルクロードします。 (今気づきましたが、アドホック手順とはいえ、ファイル名に規則性がなくて分かりづらいですね。)

 curl -H "Content-type: application/x-ndjson" -X POST localhost:9200/your_index5/_doc/_bulk?refresh --data-binary  @ja_wiki_tokyo.json

取り漏れが何件かあったようですが、ひとまずインポートできました。

5) significant_text*2で検索してみます。


POST /your_index5/_search
{
  "size": 0, 
  "query": {
    "match": {
      "content_ja": {
        "query": "上野",
        "operator": "and"
      }
    }
  },
  "aggs": {
    "titlegroup": {
      "terms": {
        "field": "title_ja"
      },
      "aggs": {
        "tokuchougo": {
          "significant_text": {
            "field": "content_ja"
          }
        }
      }
    }
  }
}

返ってきました↓。

          "key": "上野",   
          "bg_count": 14    
          "key": "東北",  
          "bg_count": 7 
          "key": "ターミナル", 
          "bg_count": 5 
          "key": "東北新幹線", 
          "bg_count": 4 
          "key": "東北本線",    
          "bg_count": 4 
          "key": "新幹線",   
          "bg_count": 4 
          "key": "常磐線",   
          "bg_count": 5 
          "key": "常磐",  
          "bg_count": 5 
          "key": "止める",   
          "bg_count": 3 
          "key": "起点",  
          "bg_count": 3 
          "key": "京成電鉄",    
          "bg_count": 3 
          "key": "何者",  
          "bg_count": 3 
          "key": "運転",  
          "bg_count": 3 
          "key": "京浜東北",    
          "bg_count": 3 
          "key": "本線",  
          "bg_count": 8 
          "key": "列車",  
          "bg_count": 6 
          "key": "京浜",  
          "bg_count": 4 
          "key": "御徒",  
          "bg_count": 4 
          "key": "始発駅",   
          "bg_count": 4 
          "key": "更に",  
          "bg_count": 4 

気持ちは分からんでもないが.... というところです。

ちなみに、アンサイクロペディアをチョイスしたのは、「危険」や「眠らない街」でSignificant_textで検索して「新宿」がヒットしたりしないかな〜、だと面白いな〜と考えたからですが、そこまで都合はよくありませんでした。

一応aggsをネストしたものもやってみましたが、結果は略します。(このaggsのネストに深い意図はないです。)

POST /your_index5/_search
{
  "size": 0, 
  "query": {
    "match": {
      "content_ja": {
        "query": "上野",
        "operator": "and"
      }
    }
  },
  "aggs": {
    "titlegroup": {
      "terms": {
        "field": "title_ja"
      },
      "aggs": {
        "tokuchougo": {
          "significant_text": {
            "field": "content_ja"
          }
        }
      }
    }
  }
}

wikipediaから東京エリアナレッジインデックス(仮称)生成

なんとなくとっつきやすかったのでアンサイクロペディアの方を先にやりましたが、最初から、より体系的に記述されているであろうwikipediaでよかったような気がしてきました...

多分同じようなフォーマットと思われるので(実際、今回やりたいことの範囲ではおおよそ同じスキーマ形式でした)同じ手順でやります。

1) wikipediaデータのダウンロード

https://dumps.wikimedia.org/jawiki/

https://dumps.wikimedia.org/jawiki/20181201/jawiki-20181201-pages-meta-current.xml.bz2

展開すると16GBぐらいでした。

2) wikipediaのデータの東京関連データ抽出

冒頭の絞り込みrubyツールをwikipedia用に見直しました。こいつにwikipediaxmlを食らわせて、 jawiki-mini.xmlというファイルを作ります。

# encoding: utf-8

# * page
# * title
# *   revision
# *      [Category:東京都の特別区...
#     revision
#        [Category:東京都の特別区...
#     ...

entry = ""
tokyo = false
revision = 0
STDIN.each_line do |l|
  if l.match(/<page>/)  then
    puts entry + "</page>" if tokyo == true
    entry = ""
    tokyo = false
    revision = 0
  end

  revision = revision + 1 if l.match(/<revision>/)
  entry = entry + l if revision <= 1
  tokyo = true if l.match(/\[Category:(東京都の特別区|東京都の市町村|東京都交通局の鉄道駅|..区の鉄道駅|...区の鉄道駅)\]/)
end

puts entry + "</page>" if tokyo == true

中途半端に同じようなコードを量産してしまいました。これなら有志の方が作成されているwikipediaXMLをパースするツール等を利用させてもらえばよかったようにも思いました。が、ひとまず続けます。

バルクロード用のJSONファイルを作ります。

export META='{"_____":{}}'; cat jawiki-mini.xml | tr '"' ' ' | tr '\n' ' ' | tr '{' ' ' | tr '}' ' ' | sed 's/<\/page>/<\/page>"\'$'\n/g' |  sed 's/<title>/"@@@":"/' | sed 's/<\/title>/","%%%":"/g' | sed 's/<[^>]*>//g' | sed '/^ *$/d' |  ruby -nle 'puts ENV["META"] + "\n{" + $_ + "}"' | sed 's/Category:/...:/g' | tr -d '[0-9A-Za-z]' | sed 's/@@@/title_ja/g' | sed 's/%%%/content_ja/g' | sed 's/_____/index/g'

ここまで書いて、ひょっとして簡易なXMLぐらいなら、サクッと読み込んでくれるkibanaとかlogstashとかの仕組みがあるのではと思いましたが、実のところよく知らないので、この方法に徹しました。

つづきます。

4) バルクロードします

JSONファイルをバルクロードします。

curl -H "Content-type: application/x-ndjson" -X POST localhost:9200/your_index_spot/your_type_spot/_bulk?refresh --data-binary  @jawiki-mini.json 

5) significant_textで検索してみます。

アンサイクロペディアの例と同じで、「上野」での検索です。

返ってきたのはコレ↓

          "key": "上野",
          "bg_count": 130
          "key": "京成",
          "bg_count": 102
          "key": "台東",
          "bg_count": 47
          "key": "御徒",
          "bg_count": 32
          "key": "御徒町",
          "bg_count": 29
          "key": "成田",
          "bg_count": 82
          "key": "千住",
          "bg_count": 93
          "key": "都営",
          "bg_count": 363
          "key": "上野公園",
          "bg_count": 23
          "key": "成田空港",
          "bg_count": 67
          "key": "秋葉原",
          "bg_count": 51
          "key": "集計",
          "bg_count": 64
          "key": "浅草",
          "bg_count": 94
          "key": "区内",
          "bg_count": 104
          "key": "葉",
          "bg_count": 60
          "key": "日間",
          "bg_count": 55
          "key": "江戸",
          "bg_count": 86
          "key": "恩賜",
          "bg_count": 23
          "key": "松坂屋",
          "bg_count": 21
          "key": "千葉",
          "bg_count": 46

悪くない気がする。

結構「上野」感の雰囲がでているかもしれません。

significant .... はそういうものだから当たり前のところもありますが、一文字のものは取り除くとしたらそのまま使えるのでは?と思わせるところがありますね。

linuxコマンドラインスクリプトの参考にしたリンク

http://taichiw.hatenablog.com/entry/2012/04/06/102650

https://qiita.com/kkdd/items/725e53572bc69e4b51b7

https://orebibou.com/2015/07/sedコマンドで覚えておきたい使い方12個/

アンサイクロペディア

https://ansaikuropedia.org/wiki/%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8

wikipedia

https://dumps.wikimedia.org/backup-index.html

http://koiroha.blogspot.com/2017/04/how-to-get-wikipedia-dump-as-plaintext.html

http://nonbiri-tereka.hatenablog.com/entry/2015/10/12/104800

参考文献リンク

http://komaken.me/blog/2018/01/16/elasticsearch-aggregationに任意の値を含める/ [Elasticsearch] aggregationに任意の値を含めるhttps://github.com/logstash-plugins/logstash-patterns-core/blob/master/patterns/grok-patterns

*1:※ ja-wiki.xmlアンサイクロペディアの全件データです。

*2:significant_termsと言いましたが、実際はtextにしました