Поиск Azure - обработка дат рождения в разных форматах

У нас есть два поля в нашей базе данных SQL / индексе поиска Azure, которые содержат даты рождения в нескольких форматах, включая только числа во всех различных последовательностях, словах и любых их вариантах. Чтобы еще больше усложнить ситуацию, возможно, в полях есть другой текст, например «DOB» или имя человека. К сожалению, мы не можем добиться согласованности из-за огромного количества источников по всему миру, из которых мы получаем эти данные.

Как лучше всего решить эту проблему в Поиске Azure? Мы можем потребовать от наших клиентов один согласованный обязательный формат DOB в их запросах, но есть ли способ, которым поисковая система Azure может использовать его и искать во многих различных форматах даты? Должны ли мы вместо этого искать способ создать новое поле в нашей таблице, которое пытается стандартизировать даты рождения?


person Stpete111    schedule 26.04.2017    source источник
comment
Не могли бы вы подробнее рассказать о своем сценарии? Вы хотите иметь возможность выполнять структурированные фильтры в полях DOB (например, получить мне все документы, где дата рождения после 1940 года) или полнотекстовый поиск в поле DOB (например, введите свой DOB :; пользователь вводит Jan 1, 1940, или 01.01.1940, или 1940-01-01, и это соответствует), или их комбинация?   -  person Bruce Johnston    schedule 26.04.2017
comment
@BruceJohnston нам не нужен какой-либо сценарий фильтрации. Наши клиенты будут запрашивать имя человека и дату рождения этого человека (подумайте о проверке перед приемом на работу). Итак, второй сценарий, который вы упомянули, - это то, что мы будем использовать. Мы можем заставить пользователя ввести DOB только в одном формате, чтобы по крайней мере извлечь из него часть переменной. Но DOB хранятся в нашей БД во многих различных форматах, как уже упоминалось.   -  person Stpete111    schedule 26.04.2017
comment
Если вы храните дату, поместите ее в тип данных даты. Другими словами, ваше последнее предложение - это то, что вы должны делать: когда вы импортируете данные, очистите данные в это время и загрузите их в новый столбец типа данных date   -  person Nick.McDermaid    schedule 26.04.2017
comment
@ Nick.McDermaid Эй, Ник, рад снова тебя слышать! Хорошо, спасибо за предложение. Мне нужно будет выяснить, как именно этого добиться. Возможно, я начну новую ветку на эту тему.   -  person Stpete111    schedule 26.04.2017
comment
О, привет, ты определенно очень занят. Очистка данных - непростая задача. Скорее всего, вы сможете много убрать автоматически, но всегда есть этот медвежатник: 5/4/2017 означает 4 мая или 5 апреля? На этот вопрос нет ответа! Если вы начнете новую тему, пожалуйста, объясните ваш текущий процесс загрузки и технологии и т. Д. Лично я, вероятно, просто запустил бы целую кучу операторов UPDATE, которые учитывают различные случаи.   -  person Nick.McDermaid    schedule 26.04.2017
comment
@ Stpete111 Учитывая, что вы хотите искать, а не фильтровать, важно то, что пользователь думает о дате, а не обязательно то, что она означает на самом деле, верно? :-) Я поговорил с одним из моих коллег об этом сценарии, и он, надеюсь, даст ответ сегодня. Некоторые из наших анализаторов, по-видимому, достаточно умны, чтобы понимать определенные форматы даты, но я позволю ему объяснить детали, поскольку я не знаком с ними.   -  person Bruce Johnston    schedule 26.04.2017
comment
@BruceJohnston фантастический, спасибо Брюс, я с нетерпением жду возможности его прочитать.   -  person Stpete111    schedule 26.04.2017
comment
@BruceJohnston, мы по-прежнему очень заинтересованы в этом, поэтому, пожалуйста, дайте мне знать, если ваш коллега все еще планирует поделиться своими мыслями. Спасибо.   -  person Stpete111    schedule 27.04.2017
comment
@ Stpete111 Работаем над этим   -  person Bruce Johnston    schedule 27.04.2017
comment
@BruceJohnston снова проверяет это. Какой-либо прогресс? Спасибо.   -  person Stpete111    schedule 08.05.2017
comment
@ Stpete111 Януш ответил 28 апреля.   -  person Bruce Johnston    schedule 08.05.2017
comment
@BruceJohnston а, хорошо, это ответ ниже от пользователя по имени Yahnoosh? Я не знала, что он твой коллега. Спасибо большое.   -  person Stpete111    schedule 08.05.2017


Ответы (1)


Одна вещь, которая может помочь вам с этой проблемой, - это анализаторы языка Microsoft, которые пытаются нормализовать даты в разных форматах, где это возможно. Вы можете использовать Analyze API, чтобы увидеть, как Анализатор английского языка Microsoft обрабатывает текст, представляющий даты. Например, для следующего запроса

 {
   "text": "2015/13/04",
   "analyzer": "en.microsoft"
 }

анализатор выдает токен, представляющий нормализованную дату:

dd20150413

Обратите внимание, анализатор распознал, что число 13 представляет день, а 03 - месяц. Такой же токен будет создан для текста 13 апреля 2015 или 13-04-2015.

Это означает, что пользователи, выполняющие поиск с использованием любого из поддерживаемых форматов, будут сопоставлять документы с датами, которые были признаны одинаковыми.

Если поведения анализатора Microsoft по умолчанию недостаточно, вы всегда можете создать пользовательский анализатор, в основе которого лежит анализатор Microsoft. Чтобы узнать больше о поведении поисковой системы по умолчанию и о том, как ее настроить, прочтите следующую статью: Как работает полнотекстовый поиск в Поиске Azure

person Yahnoosh    schedule 28.04.2017
comment
Отличный помощник, Яхнуш, я разберусь с этим и посмотрю, есть ли ответ! - person Stpete111; 28.04.2017