第一个问题: - 我的数据大小约为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束中存在1:11111的条目,那么可以在第二束中输入值小于1:11111)。
我错过了什么吗?
第二个问题: - 当我没有在查询中指定大小时,它不会返回所有45000个条目。为什么会这样?
编辑
JSON格式的数据
{
"chrom": "chr1",
"pos": 762273,
"isIndel": false,
"interpretation": "",
"sampleID": "xyz",
"isSignedOff": false,
"ownerID": null,
"entityType": 0
}
答案 0 :(得分:1)
切换为SearchType.QUERY_THEN_FETCH
而不是SearchType.QUERY_AND_FETCH
。