最初の質問:- サイズが約 45000 のデータがあります。そのデータを chrom と pos キーで並べ替えたいと思います。以下に示すデータをソートするクエリを作成しました。
//The below script sort the chromosomes
SortBuilder builder=new ScriptSortBuilder("s = doc['chrom'].value; s=s.substring(3); s.indexOf('X')!=-1?23:s.indexOf('Y')!=-1?24:s.indexOf('MT')!=-1?25:s.indexOf('M')!=-1?25:s;" +
"n = org.elasticsearch.common.primitives.Ints.tryParse(s); if (n != null) { String.format(\"%010d\",n)} else { s }", String.class.getSimpleName().toLowerCase());
SearchRequestBuilder setQuery = this.getClient().prepareSearch(this.getIndex()).setTypes(this.getType())
.addSort(builder)
.addSort(Keys.POS.toLowerCase(),SortOrder.ASC).
setQuery(QueryBuilders.matchQuery(Keys.SAMPLE_ID_DB_KEY, entityID.toLowerCase())).setSize(100).setSearchType(SearchType.QUERY_AND_FETCH).setScroll(new TimeValue(60000000));
ただし、クエリを実行した後、複数のデータを受け取りました。束はソートされますが、他の束のデータに関係なく (つまり、最初の束に 1:11111 のエントリが存在する場合、1:11111 未満の値を持つ 2 番目の束にエントリが存在する可能性があります)。
私は何かが欠けていますか?
2 番目の質問:- クエリでサイズを指定しないと、45000 エントリすべてが返されません。なぜそうなのですか?
JSON 形式のデータを編集する
{
"chrom": "chr1",
"pos": 762273,
"isIndel": false,
"interpretation": "",
"sampleID": "xyz",
"isSignedOff": false,
"ownerID": null,
"entityType": 0
}