2017-02-22 3 views
0

Ich habe einen Person Index in meiner Elasticsearch Datenbank i erhalten alle Personen über diese Methode:Jest Ergebnisse sortieren nach Name

public List<Person> findAll() { 
    SearchResult result = null; 
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); 
    searchSourceBuilder.query(QueryBuilders.matchAllQuery()); 
    Search search = new Search.Builder(searchSourceBuilder.toString()).addIndex(PERSON_INDEX_NAME) 
      .addType(PERSON_TYPE_NAME).build(); 
    try { 
     result = client.execute(search); 
    } catch (IOException e) { 
    } 
    List<SearchResult.Hit<Person, Void>> hits = result.getHits(Person.class); 
    return hits.stream().map(this::getPerson).collect(Collectors.toList()); 
} 

, aber ich möchte die Ergebnisse alphabetisch nach Namen (Person sortiert bekommen hat String-ID und String-Name), aber ich kann nicht herausfinden, wie. jede Hilfe wird geschätzt

+0

diese Antwort helfen könnten: http://stackoverflow.com/questions/42261521/how-to-sort-elasticsearch-results-using-jest/42265028#42265028 – Val

+0

, dass andere Frage (was ich auch nur bemerkt, ist mein xDDD) funktioniert, weil die lange ID, die nach Name (String) gemacht wird, nicht funktioniert: c –

+0

Und Sie können nicht nach Namen sortieren, weil Ihr Namensfeld analysiert wird, oder? Sie müssen wahrscheinlich ein anderes Unterfeld des Namensfelds erstellen, um es dann zu sortieren. – Val

Antwort

0

gut.

i nahm die von ES angegebenen Liste und ordnete sie die Kollektionen Sortiermethode

+0

Das wird Ihre Ergebnisse nicht korrekt sortieren, sondern nur die ersten zehn Ergebnisse, die Sie von ES erhalten. – Val

+0

uh? warum nur die ersten zehn? –

+0

Da Sie in Ihrer Abfrage keine Größe haben, gibt ES standardmäßig nur die ersten zehn Ergebnisse sortiert nach Punkten zurück. Sie müssen etwas lesen: https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-from-size.html ;-) – Val

1

mit Welcher Typ ist Ihr Name Feld?

Das Problem besteht möglicherweise darin, dass ElasticSearch den Namen in Wörter aufteilt und dann nach jedem Wort sortieren kann. Das kann einige ziemlich zufällig aussehende Ergebnisse geben (z. B. würde der Name "Zachary A. Zincstein" hochkommen, weil er ein "A" enthält).

Eine Lösung besteht darin, ein zweites Feld zu haben, in dem Sie den Typ keyword im Mapping festlegen und danach sortieren.

+0

danke für Ihre Antwort, beendete ich meine Arbeit an Dieses Projekt und wurde in ein anderes verschoben, wenn ich mich richtig erinnere, änderten wir die Felder in der DB in "Nicht analysiert", damit ES die bereits sortierten Werte zurücksendet. –