Première question: - J'ai des données de taille environ 45000. Je veux trier ces données sur chrom et pos clé. J'ai écrit la requête pour trier les données ci-dessous.Pourquoi trier dans elasticSearch ne pas trier les données correctement?
//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));
Cependant, après le lancement de la requête, j'ai reçu plusieurs paquets de données. Où le groupe est trié mais indépendamment des données dans l'autre groupe (c'est-à-dire s'il y a une entrée de 1: 11111 présent dans le premier groupe alors il peut y avoir entrée dans le deuxième groupe ayant une valeur inférieure à 1: 11111).
Ai-je oublié quelque chose?
Deuxième question: - Lorsque je ne spécifie pas la taille dans la requête, il ne me renvoie pas toutes les 45000 entrées. Pourquoi est-ce vrai?
Modifier
données au format JSON
{
"chrom": "chr1",
"pos": 762273,
"isIndel": false,
"interpretation": "",
"sampleID": "xyz",
"isSignedOff": false,
"ownerID": null,
"entityType": 0
}
Pourriez-vous ajouter des données d'essai et un mappage à votre question? – imotov
@imotov: J'ai ajouté des données de test – Sach