2013-10-11 4 views
0

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 
} 
+0

Pourriez-vous ajouter des données d'essai et un mappage à votre question? – imotov

+0

@imotov: J'ai ajouté des données de test – Sach

Répondre

1

Passer au SearchType.QUERY_THEN_FETCH au lieu de SearchType.QUERY_AND_FETCH.

+0

Pourriez-vous s'il vous plaît mettre la lumière sur la différence entre ces deux? – Sach

+0

@SachinPasalkar voir http://www.elasticsearch.org/guide/fr/elasticsearch/reference/current/search-request-search-type.html#query-and-fetch – imotov

Questions connexes