RavenDB моделирование / индексирование: проверка адреса с использованием справочных данных - PullRequest
1 голос
/ 20 сентября 2019

Я использую стабильную версию RavenDB 4.2.3 в Windows x64, пытаюсь загрузить искусственный документ по идентификатору из другого индекса.

Я работаю в системе ETL, где значительная часть работыэто проверка адреса.У меня есть справочные данные для действительных адресов, состоящие из страны, штата, почтового индекса, города / сообщества, улицы и диапазона номеров домов (где применимо), а также дополнительная информация, такая как LAT / LON, тип сообщества и так далее.Типичный ввод для проверки будет состоять из десятков или сотен тысяч адресных записей (обычно это почтовый индекс, сообщество, улица, номер дома), где около 30% не будут соответствовать записи в справочных данных (после нормализации, конечно), потому чтоорфографических ошибок, транспозиций и т. д.

Те, которые, как я полагаю, должны были бы запрашивать один за другим, используя нечеткие запросы, затем либо автоматически исправлять с использованием предварительно определенного расстояния Левенштейна-Дамерау, либо отфильтровывать для ручной коррекции (при предоставлении наилучших совпадений).вместе с ними). ​​

Но как насчет других 70% или около того, что действительно имеют прямое соответствие в справочных данных?Те, к которым я не хочу обращаться, потому что задержка в сети и так далее, даже если точные запросы выполняются быстрее, чем нечеткие.Для этого мне нужен индекс.

Поскольку я не могу выполнить запрос в определении индекса, моя идея состоит в том, чтобы создать коллекцию из этих справочных данных, используя хешированные значения (нормализованных) частей адреса для поиска (минус номер дома)и использование упомянутого хэша в качестве части идентификатора объекта (или даже непосредственного использования частей адреса) для хранения нормализованных и канонических адресов;поэтому я могу затем использовать LoadDocument () для этой коллекции ссылок в индексе проверяемых адресов для проверки на 100% проверяемый адрес (LoadDocument () возвращает ненулевой объект, а номер дома находится в диапазоне в возвращенном ссылочном адресе) и дляотфильтровать те, для которых мне нужно делать более медленные запросы.

Звучит ли это как хорошее решение с учетом требований, или я что-то упустил здесь, и есть лучший, более удобный способ RavenDB?

Единственное, что я не считаю возможным, - это создать указанную коллекцию ссылок как выход из индекса карты / редукции, поскольку я не могу управлять генерацией идентификатора;Идентификатор определяется как хэш для группы по полям, но у меня нет доступа к этой функции хеширования в определении индекса для проверяемых адресов, чтобы использовать его результат в качестве параметра идентификатора документа для LoadDocument ().

Я обнаружил проблему для функции, управляющей искусственным созданием идентификатора документа, но это еще не сделано: https://issues.hibernatingrhinos.com/issue/RavenDB-12932

...