Spring Elastic Search нечувствительная к регистру сортировка с Order.ignoreCase() не работает

Я пытаюсь отсортировать список лиц по имени. используя Открытую декларацию org.springframework.data.domain.Sort.Order.Order.ignoreCase(), как показано ниже.

    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();

В репозитории ES у меня есть имя человека с разными регистрами. Например.

  • Сачин
  • аджай
  • Дони

Я ожидаю отсортированные данные, как показано ниже.

  • аджай
  • Дони
  • Сачин

Но данные отсортированы, как показано ниже, что неверно (не ожидается),

  • Дони
  • Сачин
  • аджай

основной причиной такого поведения является то, что для ajai первая буква в маленьком регистре. Согласно случаям ES поддерживается нечувствительная сортировка. Может ли кто-нибудь сказать мне, как я могу это исправить?


person J J    schedule 18.01.2017    source источник
comment
Какое сопоставление для firstName? Вы читали этот раздел о сортировке? elastic.co/guide/en/elasticsearch/guide/ current/ Недавно мы переиндексировали одно поле, чтобы оно не учитывало регистр для сортировки, применив анализатор нижнего регистра к необработанному полю.   -  person shawnjohnson    schedule 23.01.2017
comment
что вы имеете в виду под картированием? spring-es предоставляет Order.ignoreCase(), который должен работать без применения анализатора нижнего регистра.   -  person J J    schedule 24.01.2017


Ответы (1)


Пакет, который вы вызываете, является частью основных данных Spring, а не специфичным для ES. Elasticsearch должен быть настроен с правильным сопоставлением и проиндексирован с этими настройками. Насколько я знаю, Elasticsearch не имеет такой возможности в Query DSL для сортировки так, как вы спрашиваете (в алфавитном или лексикографическом порядке). Если вы пытаетесь сортировать на стороне клиента, это приведет к сортировке только результатов, возвращаемых для первой страницы, что, вероятно, не то, что вы намереваетесь.

Также см. это сообщение, которое сработало для нас.

person shawnjohnson    schedule 24.01.2017
comment
Я использую весенние данные, поэтому .ignoreCase() должно работать. - person J J; 24.01.2017