2017-01-18 2 views
0

J'essaye de trier la liste de Person par leur prénom. en utilisant la déclaration ouverte org.springframework.data.domain.Sort.Order.Order.ignoreCase() comme indiqué ci-dessous.Spring Elastic Search ne tient pas compte de la casse avec Order.ignoreCase() ne fonctionne pas

import org.springframework.data.domain.Sort; 
    import org.springframework.data.domain.Sort.Direction; 
    import org.springframework.data.domain.Sort.Order; 

    Order sortOrfer = new Order(Sort.Direction.ASC, "firstName").ignoreCase(); 

Dans le référentiel ES, j'ai un nom de personne avec différents cas. par exemple.

  • Sachin
  • ajai
  • Dhoni

J'attend les données triées comme indiqué ci-dessous.

  • ajai
  • Dhoni
  • Sachin

Mais les données sont triées comme ci-dessous, ce qui est correct (pas prévu),

  • Dhoni
  • Sachin
  • ajai

la cause de ce comportement est que pour ajai la première lettre est dans un petit cas. Selon les cas de ES le tri insensible est pris en charge, Quelqu'un peut-il me dire comment puis-je résoudre ce problème?

+0

Quel est le mappage pour firstName? Avez-vous lu cette section sur le tri? https://www.elastic.co/guide/en/elasticsearch/guide/current/multi-fields.html Nous avons récemment réindexé un champ pour qu'il soit insensible à la casse pour le tri en appliquant un analyseur en minuscules au champ brut. – shawnjohnson

+0

que voulez-vous dire par cartographie? 'spring-es' fournit' Order.ignoreCase() 'qui devrait fonctionner sans appliquer d'analyseur en minuscules. – Jobin

Répondre

-1

Le package que vous appelez fait partie des données de base du ressort, et non spécifique à ES. Elasticsearch doit être configuré avec le mappage approprié et indexé avec ces paramètres. Pour autant que je sache, Elasticsearch n'a pas cette capacité dans Query DSL pour trier comme vous le demandez (alphabétique vs lexicographique). Si vous essayez de trier du côté client, cela ne ferait que trier les résultats renvoyés pour la première page, probablement pas ce que vous avez l'intention de faire.

Voir aussi this post qui a fonctionné pour nous.

+0

J'utilise spring-data, donc '.ignoreCase()' devrait fonctionner. – Jobin