検索結果"_shards"内の"skipped"ですが、どのような場合にカウントされるのか、定義が見当たらないようです。
{
"took" : 5,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"skipped" : 0, <============== こちらの定義について
"failed" : 0
},
既に英語のほうで投稿させて頂いておりますが、現在ご回答を得られておらず、ご教示頂けたら大変ありがたいです。
https://discuss.elastic.co/t/definition-for-skipped-in-shards-as-query-result/159841
どなたかご存知のかた、いらっしゃらないでしょうか。
tsgkdt
(tsgkdt)
December 14, 2018, 2:35am
3
いろいろ検索して探しては見るものの、確かにどのような場合にスキップのカウントがされるのか、について言及されているものが見つかりませんね。
Cross Cluster Searchの方でしたら、少しだけ記述はあるようですが、_shards以下の方については見つかりませんでした。
https://www.elastic.co/guide/en/elasticsearch/reference/6.5/modules-cross-cluster-search.html
お役に立てず申し訳ないです。
1 Like
tsgkdt様
コメント誠にありがとうございます。
Cross Cluster Searchには、"skipped"の記述があることを確認させて頂きました。
もし"_shards"の方について英語のトピックで情報を得られましたら、こちらで共有させて頂きます。
mnozawa
(Makoto Nozawa)
December 14, 2018, 5:06am
5
類似投稿でも言及されていたこのPRがそれらしいですね
コードまで目を通していないですが_field_stats
を元にrange queryがマッチするdocumentが当該shardに含まれそうかどうかをあらかじめチェックする(pre-filtering)ということですかね
参考として言及されていることそのままですが
1 Like
st1t
(Shota Ito)
December 14, 2018, 5:24am
6
日曜プログラマーで全く自信がないのですがElasticsearchのコードから_shards skippedを追いかけていくと
}
}
return new ShardStats(successfulShards, totalShards, skippedShards, failures.toArray(new ShardSearchFailure[failures.size()]));
}
@Override
public String toString() {
return "_shards : {" +
"total=" + totalShards +
", successful=" + successfulShards +
", skipped=" + skippedShards +
", failed=" + (shardFailures != null && shardFailures.length > 0 ? shardFailures.length : 0 ) +
(shardFailures != null && shardFailures.length > 0 ? ", failures: " + Arrays.asList(shardFailures): "") +
'}';
}
}
}
return skippedShards;
}
public ShardSearchFailure[] getShardFailures() {
return Arrays.copyOf(shardFailures, shardFailures.length, ShardSearchFailure[].class);
}
static ShardStats fromXContent(XContentParser parser) throws IOException {
int successfulShards = -1;
int totalShards = -1;
int skippedShards = 0; //BWC @see org.elasticsearch.action.search.SearchResponse
List<ShardSearchFailure> failures = new ArrayList<>();
XContentParser.Token token;
String currentName = parser.currentName();
while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) {
if (token == XContentParser.Token.FIELD_NAME) {
currentName = parser.currentName();
} else if (token.isValue()) {
if (FAILED.match(currentName, parser.getDeprecationHandler())) {
parser.intValue();
} else if (SKIPPED.match(currentName, parser.getDeprecationHandler())) {
このコメントのSearchResponse.javaで定義されているgetterのコメントを見てみると、
/**
* The successful number of shards the search was executed on.
*/
public int getSuccessfulShards() {
return successfulShards;
}
/**
* The number of shards skipped due to pre-filtering
*/
public int getSkippedShards() {
return skippedShards;
}
/**
* The failed number of shards the search was executed on.
*/
public int getFailedShards() {
// we don't return totalShards - successfulShards, we don't count "no shards available" as a failed shard, just don't
これは、@mnozawa さんが言及されているpre-filteringかなと思っています
1 Like
mnozawa様
コメントありがとうございます。
そのPRしか、skippedに関する情報はないようですね。
他にもskippedがカウントされるケースが無いかと気にしており、このトピックに
投稿させて頂きました。
st1t様
コードまでご確認頂きありがとうございます。
レファレンスのもトピックにも定義が無ければ、もう
コードをトレースするしかありません。
こちらのほうでも、コードも確認させて頂きます。
1 Like
johtani
(Jun Ohtani)
December 14, 2018, 7:36am
9
ちなみにですが、なぜそれが気になって調べているのでしょうか?
1 Like
johtani様
タイトルと最初の投稿に記載した以上のことはなく、skippedがどのような場合に
カウントされるかが分からないからです。
検索して、skippedがカウントされていたら、理由が気になるかと思います。
system
(system)
Closed
January 11, 2019, 8:58am
11
This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.