Выделение числового поля из результатов, извлеченных из пользовательских полей «_all» - PullRequest
0 голосов
/ 04 марта 2019

Я новичок в Elasticsearch.У нас есть определенные данные в разных типах данных, которые мы хотим проиндексировать и получить.Мы используем пользовательские поля "_all", как описано в приведенной ниже ссылке

Пользовательские поля "_all"

Ниже приведен наш код

Для создания индекса

PUT myindex
{
  "mappings": {
    "mytype": {
      "properties": {
        "first_name": {
          "type":    "text",
          "copy_to": "contact_details" 
        },
        "mobile_number": {
          "type":    "long",
          "copy_to": "contact_details" 
        },
        "contact_details": {
          "type":    "text"
        }
      }
    }
  }
}

Для добавления в индекс

PUT myindex/mytype/1
{
  "first_name": "John",
  "mobile_number": 9988776655
}

Для поиска

GET myindex/_search
{
  "query": {
    "multi_match": {
      "query": "9988776655",
      "fields": [
        "contact_details"
      ],
      "fuzziness": "auto"
    }
  },
  "highlight": {
    "require_field_match": false,
    "pre_tags": [
      "<tag1>"
    ],
    "post_tags": [
      "</tag1>"
    ],
    "fields": {
      "first_name": {},
      "mobile_number": {}
    }
  }
}

Используя приведенный выше запрос, мы можем получить результаты, но не можем выделитьисходное значение поля, как описано в следующей ссылке

Подсветка исходных полей

Необходимо знать, если мы что-то делаем неправильно или есть ошибка

Обратите внимание, что мы должны использовать пользовательское поле "_all", так как это важно для наших требований.Кроме того, тип данных полей не может быть изменен.

Большое спасибо

1 Ответ

0 голосов
/ 04 марта 2019

Я проверил ваш запрос, и мне кажется, что он выделяет исходное поле, в данном случае mobile_number с окружающими его полями тегов.

Вот результаты, которые я получаю:

    {
  "took" : 93,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 1,
    "max_score" : 0.2876821,
    "hits" : [
      {
        "_index" : "my_so_index",
        "_type" : "mytype",
        "_id" : "1",
        "_score" : 0.2876821,
        "_source" : {
          "first_name" : "John",
          "mobile_number" : 9988776655
        },
        "highlight" : {
          "mobile_number" : [
            "<tag1>9988776655</tag1>"
          ]
        }
      }
    ]
  }
}

Я выполняю вышеуказанный запрос в версии 6.6 ElasticSearch.Для версии 5 документация показывает немного другую структуру, вы можете попробовать это:

GET myindex/_search
{
  "query": {
    "multi_match": {
      "query": "9988776655",
      "fields": [
        "contact_details"
      ],
      "fuzziness": "auto"
    }
  },
  "highlight": {
    "pre_tags": [
      "<tag1>"
    ],
    "post_tags": [
      "</tag1>"
    ],
    "fields": {
      "first_name": {"require_field_match": false},
      "mobile_number": {"require_field_match": false}
    }
  }
}
...