Хорошо ли хранить таблицу реляционной базы данных как другой индекс в упругом поиске, если да, то как передать связь в индексе? - PullRequest
0 голосов
/ 21 октября 2018

Например, в моем случае есть 3 таблицы postgres, которые связаны первичным ключом и обмениваются данными.

1) Таблица продукта - содержит всю стоимость продукта и цену и т. Д.

2.) Питательные вещества. Содержит питательные вещества того продукта, который имеет дубликат первичного ключа.

3.) Размер порции - содержит количество порций питательных веществ.

IПередача этих данных вasticsearch после выполнения объединения сделала его более сложным.Поэтому я хочу перенести эти данные вasticsearch с NDB_NO в качестве document_id, и под ним будут поступать все данные.Мне нужна помощь .. пожалуйста, проверьте изображение здесь

1 Ответ

0 голосов
/ 22 октября 2018

Это зависит.

Иногда зеркалирование вашей базы данных Таблицы в Elasticsearch имеет смысл.Например, если вы хотите, чтобы пользователи могли самостоятельно осуществлять поиск по списку питательных веществ и по списку продуктов, лучше всего иметь два указателя Elasticsearch.

Тем не менее, как это звучит, как вы хотите, ичаще встречается в мире Elasticsearch, это объединение данных из разных таблиц при индексации в Elasticsearch.Из-за того, как работает полнотекстовый поиск, вы часто хотите денормализовать ваши данные.Денормализация, как правило, является антипаттерном в мире реляционных баз данных, но часто является наилучшей практикой для Elasticsearch.

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

#change host to reflect your Elasticsearch server
curl -XPUT 'http://localhost:9200/products/_doc/1' -d '{
  "name": "Banana",
  "nutrients": ["potassium", "vitamin C", "copper"]
}'

curl -XPUT 'http://localhost:9200/products/_doc/2' -d '{
  "name": "Rice",
  "nutrients": ["manganese", "copper"]
}'

curl -XPUT 'http://localhost:9200/products/_doc/3' -d '{
  "name": "Orange",
  "nutrients": ["Vitamin C", "Thiamin"]
}'

Прошу прощения за мои неудачные попытки получить информацию о питании

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

Возможно, вы захотите повторно использовать идентификаторы из своей реляционной базы данных для своих продуктов в Elasticsearch (или магазинеих в другом поле), чтобы вы могли вернуться к «источнику» ваших данных для получения дополнительной информации.

...