2017-06-27 3 views
0
sorte

J'ai écrit une requête de recherche pour ElasticSearch:Spring données ElasticSearch requête générique avec

{ 
"query": { 
    "query_string": { 
     "fields": ["studentName", "countryName"], 
     "query" : "*o*" 
    } 
    }, 
"sort" : [{ 
    "studentName" : { "order": "desc" } 
    }] 
} 

Ceci est exécuté pour localhost:9200/myindex/mytype/_search (POST).

Je reçois des résultats corrects basés sur le query qui sont triés sur la base de sort partie. Mais quand je convertir en Interrogation printemps des données comme:

@Query("{ \"query\": { \"query_string\" : { \"fields\" : [\"studentName\", \"countryName\"], \"query\":\"*?0*\"}}," + 
     " \"sort\" : [{ \"?1\" : { \"order\": \"?2\" }}]}") 
Page<Student> freeTextSearchPortSort(String freeText, String sortBy, String sortOrder, Pageable pageable); 

je reçois toujours le même résultat, triés sur l'ordre d'insertion. Que dois-je faire différemment?

Répondre

0

Vous devez créer PageRequest qui a un constructeur qui prend la page, la taille, la direction, les propriétés. PageRequest implémente l'interface Pageable.

Votre requête ressemblerait à ceci:

@Query("{ \"query\": { \"query_string\" : { \"fields\" : [\"studentName\", \"countryName\"], \"query\":\"*?0*\"}}") 
Page<Student> freeTextSearchPortSort(String freeText, Pageable pageable); 

L'emplacement de l'endroit où cela est appelé ressemblera.

PageRequest pageRequest = new PageRequest(0, no_of_rec_to_be_fetched, Sort.Direction.fromString("desc"), "studentName") 

freeTextSearchPortSort ("someText",pageRequest) 

Espérons que cela aide !!

+0

C'était l'erreur que je faisais. Merci beaucoup. –

+0

Heureux d'aider ... – Richa

+0

Je viens de remarquer que la requête n'est pas en mesure de trier un mélange de texte et de chiffres. Dans certaines de mes entrées, j'ai des caractères comme '-', et' ('. Peuvent-ils être gérés? –