Сортировка Elasticsearch только по алфавиту, а не по номеру

У меня проблемы с сортировкой в ​​PHP, вот мое отображение:

{
  "jdbc": {
    "mappings": {
      "jdbc": {
        "properties": { 
          "admitted_date": {
            "type": "date",
            "format": "dateOptionalTime"
          },
          "et_tax": {
            "type": "string"
          },  
          "jt_tax": {
            "type": "string"
          }, 
          "loc_cityname": {
            "type": "string"
          }, 
          "location_countryname": {
            "type": "string"
          },
          "location_primary": {
            "type": "string"
          },  
          "pd_firstName": {
            "type": "string"
          } 
        }
      }
    }
  }
}

Когда я использую порядок результатов по сортировке, он будет упорядочивать результаты по буквенно-цифровым, он будет загружать результаты с числовыми в первую очередь. Мне нужно заказать результаты только начальные буквы алфавитов. Теперь он заказывает так:

http://localhost:9200/jdbc/_search?pretty=true&sort=pd_lawFirmName:asc

  1. БМ &
  2. Гомес-Ацебо и Помбо
  3. Аддлшоу Годдард

Как заказать результаты, как это?

  1. Аддлшоу Годдард
  2. БМ &
  3. Гомес-Ацебо и Помбо

Вот мой запрос, который я использую для индексации

{
    "type" : "jdbc",
    "jdbc" : {
        "driver" : "com.mysql.jdbc.Driver",
        "url" : "jdbc:mysql://localhost:3306/dbname",
        "user" : "user",
        "password" : "pass",
        "sql" : "SQL QUERY",
        "poll" : "24h",
        "strategy" : "simple", 
        "scale" : 0,
        "autocommit" : true,
        "bulk_size" : 5000,
        "max_bulk_requests" : 30,
        "bulk_flush_interval" : "5s",
        "fetchsize" : 100,
        "max_rows" : 149669,
        "max_retries" : 3,
        "max_retries_wait" : "10s",
        "locale" : "in",
        "digesting" : true,
        "mappings": {
        "sorting": {
        "properties": { 
        "pd_lawFirmName": {
        "type": "string",
        "fields": {
          "raw": {
            "type": "string",
            "index": "not_analyzed"
          }
        }
      }
      }
    }
  }
  }
}

1 ответ

Это так, потому что Elasticsearch будет токенизировать текст, используя анализатор по умолчанию, который standard, Например, McDermott Will Amery индексируется как:

              "amery",
              "mcdermott",
              "will"

Если вы хотите сортировать так, я бы предложил изменить отображение вашего pd_lawFirmName примерно так:

  "pd_lawFirmName": {
    "type": "string",
    "fields": {
      "raw": {
        "type": "string",
        "index": "not_analyzed"
      }
    }
  }

и сортировать по raw подпол:

http://localhost:9200/jdbc/_search?pretty=true&sort=pd_lawFirmName.raw:asc
Другие вопросы по тегам