Показаны сообщения с ярлыком JSON. Показать все сообщения
Показаны сообщения с ярлыком JSON. Показать все сообщения

06 июня 2024

Преобразование JSON-строки в тип дата/время используя SQL

Согласно стандарту ECMA-404. The JSON Data Interchange Syntax в JSON нет типа для хранения даты и времени. В каком виде они будут закодированы в каждом конкретном JSON-файле определяет его автор. Я встречал два варианта:

  1. Целое число содержащее UNIX-время (UNIX-time или POSIX-time), которое используется в UNIX и других POSIX-совместимых операционных системах, и определяет количество секунд, прошедших с полуночи (00:00:00 UTC) 1 января 1970 года.
  2. Строка. Формат строки зависит от фантазии автора файла, но обычно используется стандарт ISO 8601, который представляет дату и время в универсальном формате, легко читаемом как людьми, так и машинами.
Недавно я средствами СУБД парсил JSON в котором дата/временя хранилась в строке формата "YYYY-MM-DDThh:mm:ss.sssZ" (например, "1975-11-21T01:34:53.666Z"). Процедура парсинга мне нужна была для трех СУБД: PostgreSQL, MS SQL Server и Oracle.

12 ноября 2019

SQL доступ к Elasticsearch


    Что делать, если вы хотите использовать SQL-запросы к Elasticsearch, но не купили X-Pack и у вас нет доступа к Elasticsearch SQL?

Вариант первый: смириться и продолжить писать REST-запросы

Вариант второй: использовать специальную библиотеку для SQL-доступа к Elasticsearch. Например, CData Elasticsearch Driver. Она существует в множестве вариантов и позволяет получить доступ к данным в Elasticsearch из любых средств разработки и программ (FireDAC Components, ADO.NET Provider, ODBC Driver, JDBC Driver, Power BI Connectors, BizTalk Adapter, PowerShell Cmdlets, Excel Add-In, Anypoint Connectors, SSIS Component).

Рассмотрим использование CData FireDAC Components for Elasticsearch в Delphi.

08 ноября 2019

Формирование строкового значения для JSON

    При формировании строки для строкового значения JSON возникает необходимость контролировать некоторые символы. Например, если в содержимом строки есть двойная кавычка, то для получения строки JSON недостаточно взять исходную строку в двойные кавычки. Это двойную кавычку необходимо "экранировать" - поставить перед ней символ обратной косой черты ("\"). Кроме двойной кавычки обязательно необходимо экранировать саму обратную косую черту, а также все управляющие символы от U+0000 до U+001F (т.е. символы от 0 до 31).
    Рассмотрим подробнее, как экранируются символы. Любой символ от U+0000 до U+FFFF (не только управляющий) в строке JSON может быть представлен в виде последовательности из шести символов: обратный косая черта, строчная буква u, код символа в виде четырех шестнадцатеричные цифр. Буквы в шестнадцатеричные цифрах не зависят от регистра и могут быть как прописными, так и строчными. Например, буква "ё" представляется как "\u0451", а буква "к" как "\u043A".

05 ноября 2019

Elasticsearch. Замена анализатора по умолчанию

    Зачастую при работе с Elasticsearch для полей необходимо указать не стандартный анализатор. Например, если нам нужен анализатор для конкретного языка или необходимо специфическая обработка текста (например, исключить определенные слова, задать список синонимов, или как я уже писал – приравнять Ё к Е...).

20 октября 2019

"ё"... "е"... какая мне разница? Программа должна найти!

 Буква "ё" совсем не важна... Завтра похолодает и мы все передохнем от жары...

    Иногда я завидую англоязычным программистам. Например, на клавиатуре им не надо переключать раскладку. А ещё у них нет буквы "Ё"! Буква "Ё" - это очень своенравная особа. Она обязательна только в собственных именах, а в остальных случаях употребление "Ё" или "Е" определяется выбором автора текста. Но при этом пользователя, который ищет по тексту, не заботит, что написал автор - "Ё" или "Е". А какая ему разница? Программа должна найти!

30 сентября 2019

Delphi & Elasticsearch. Загрузка и индексирование файлов

    В статье "Полнотекстовый поиск по содержимому файлов" я рассказывал, что нужно сделать для загрузки файла на индексацию в Elasticsearch. Теперь подробно рассмотрим реализацию этого процесса на Delphi с использованием стандартных классов HttpClient и NetEncoding.
    Думаю, что будет более понятно если я включу описание реализации в качестве комментариев в текст процедуры индексации файла.
uses
  System.Classes,
  System.SysUtils,
  System.StrUtils,
  System.Hash,
  System.NetEncoding,
  System.Net.HttpClient,
  System.Net.HttpClientComponent;

const
  csBaseUrl = 'http://localhost:9200/';
...

19 сентября 2019

Полнотекстовый поиск по содержимому файлов

    Многие программисты сталкиваются с тем, что их информационная система должна иметь полнотекстовый поиск. На помощь им приходят разработчики СУБД, которые предлагают свои решения. Встроенный механизм полнотекстового поиска есть у всех ведущих СУБД: Oracle, SQL Server, MySQL, PostgreSQL... Но не все они, как Oracle Text, умеют индексировать содержимое документов в форматах MS Office, PDF, XML, HTML... плюс к этому у многих есть проблемы с морфологией русского языка и производительностью.
    Единственным выходом является использование специальных поисковых систем. Наиболее распространенными являются системы построенные на базе библиотеки Lucene: Elasticsearch, Solr и Sphinx. Мой выбор пал на Elasticsearch.