Отображение геопункта не работает в ElasticSearch - PullRequest
0 голосов
/ 27 апреля 2019

Я использую NodeJS ElasticSearch с ElasticSearch 7.0.Я создаю тип отображения geo_point для определенного поля, но он не показывает тип geo_point в _mapping.Я пытался искать, используя filter.geo_distance, я получил failed to find geo point field.

Node ElasticSearch Mapping

client.indices.putMapping({
  index: 'listing',
  type: 'detail',
  body: {
    properties: {
      'listing_coordinates': {
        "type": "geo_point"
      }
    }
  }
}, function(err) { console.log(err) })

Ошибка сопоставления

[invalid_argument_exception] Типы не могут быть предоставлены в путзапросы на сопоставление, если для параметра include_type_name не установлено значение true.

/ перечисление / _mapping

mappings: {
 properties: {
  "listing_coordinates": {
    "properties": {
      "lat": {
        "type": "text",
        "fields": {
          "keyword": {
            "type": "keyword",
            "ignore_above": 256
          }
        }
      },
      "lon": {
        "type": "text",
        "fields": {
          "keyword": {
            "type": "keyword",
            "ignore_above": 256
          }
        }
      }
    }
  },
 }
}

Поиск узла

client.search({
    index: 'listing',
    type: 'detail',
    size: 5,
    body: {
      query : {
        "bool": {
          "filter": {
            "geo_distance" : {
              "distance" : "500km",
              "listing_coordinates" : {
                "lat" : 3.0567521,
                "lon" : 101.5854671
              }
            }
          }
        }
      }
    }
 }

Ошибка поиска

[query_shard_exception] не удалось найти поле geo_point [перечисление_координат]

У меня были поля сопоставления датмой список, он работал хорошо.

1 Ответ

1 голос
/ 27 апреля 2019

Смотрите это: https://github.com/elastic/elasticsearch-js/issues/166 Я думаю, что ваша проблема должна быть похожа на его. Обратите внимание на порядок проведения мероприятия. Также обратите внимание, что если вы не дожидались завершения PutMapping, эти индексы могли бы автоматически создаваться в текстовые поля.

Обновление:

Казалось, что ваш PutMapping не удался, а затем ваше отображение создается в текстовое поле путем получения данных в качестве поведения по умолчанию.

В ES7.0 нельзя указывать тип при создании индекса, если не задан параметр include_type_name. В вашем случае введите detail. Для обработки include_type_name см. this . Или вы можете просто попытаться удалить type: detail в вашем случае. Пожалуйста, попробуйте очистить отображение индекса, прежде чем пытаться.

Ref: https://www.elastic.co/guide/en/elasticsearch/reference/master/removal-of-types.html#removal-of-types

...