Как создать эластичный поисковый индекс, который подражает моей базе данных MySQL - PullRequest
0 голосов
/ 30 октября 2019

Я новичок вasticsearch и мне трудно переключаться с mysql наasticsearch

my Mysql мои таблицы выглядят так:


    table : <strong> test_request </strong>
    +---------+-------------+--------------+-----------+------------+-----------+
    | test_id | device_name | ip_address   | user_name | time_stamp | show_flag |
    +---------+-------------+--------------+-----------+------------+-----------+
    |   1     |     d1      |   0.0.0.0    |   admin   |            |     Y     |
    +---------+-------------+--------------+-----------+------------+-----------+

    <hr/> 
    table: <strong> test_results </strong>
    +----+---------+-----+-----------------------+-------------------------+----------------------------------+-----------+
    | id | test_id | cli |          xml          |           json          |             another json         | show_flag |
    +----+---------+-----+-----------------------+-------------------------+----------------------------------+-----------+
    | 1  |   1     |  c1 |  some xml format data |  {"some":"json here"}   |   {"some":" another json here"}  |     Y     |
    +----+---------+-----+-----------------------+-------------------------+----------------------------------+-----------+
    | 2  |   1     |  c2 |  some xml format data |  {"some":"json here"}   |   {"some":" another json here"}  |     Y     |
    +----+---------+-----+-----------------------+-------------------------+----------------------------------+-----------+
    | 3  |   1     |  c2 |  some xml format data |  {"some":"json here"}   |   {"some":" another json here"}  |     Y     |
    +----+---------+-----+-----------------------+-------------------------+----------------------------------+-----------+

поле test_id в test_request table и поле id в таблице test_results равны auto increment. Поля json и another json имеют тип данных JSON.

Я пытаюсь использовать elasticsearch_dsl для создания индекса и его отображений. Я изучаю документы , чтобы понять, как этого добиться, но я не могу понять три вещи

  1. , как получить test_id до auto increment
  2. как создать поле с JSON типом данных
  3. Лучший способ установить отношения между обоими (я частично понял, что вложенные могут помочь здесь), но ищет правильный способ сделать это

1 Ответ

1 голос
/ 30 октября 2019

Столбцы auto increment id играют следующие правила в таблицах SQL:

  1. они являются уникальными идентификаторами строки
  2. они позволяют связывать строки между таблицами

Для достижения этой цели в эластичном поиске вам не нужно поле auto increment. Вы можете добавить документ в индекс эластичного поиска, а эластичный поиск добавит к нему уникальный идентификатор.

Для полей JSON используйте просто тип данных объекта .

Существует несколько вариантов настройкиотношение типа SQL join:

  1. Вы можете поместить test_results как nested объекты в test_request document
  2. Вы можете использовать объединить тип данных поле для связиtest_results документы в test_request документы в том же индексе
  3. Вы можете денормализовать и сохранить каждый test_result в одном документе вместе с test_request. Это нормально, что test_request будет храниться много раз. Elasticsearch в первую очередь предназначен для поиска.

Какую версию вы выбираете, зависит от вас. Это зависит от того, как вы собираетесь использовать ваши данные, какие запросы вы собираетесь делать. Можете ли вы собрать все test_results вместе с test_request и сохранить их с помощью одного вызова, или вам нужно сохранить test_request и последовательно добавить test_results?

Последовательное обновление вложенного поля будет означатьпереиндексация всего документа каждый раз. Join datatype дорого обходится для запроса.

Денормализация добавляет использование пространства, но если число test_results на запрос невелико, то это, возможно, лучший вариант.

...