Эластичный поиск рекомендуется для поиска по нескольким полям - PullRequest
1 голос
/ 13 апреля 2020

Скажем, если у нас есть документ, который может иметь 50-60 полей. Например:

{  
  "priceCurrency": "USD",
  "price": "119.99",
  "priceValidUntil": "2020-11-05",
  "brand": "Acme",
  "logo": "http://www.example.com/logo.png",
  "name": "WidgetPress",
  "category": "Widgets",
  "image": "http://www.example.com/image.jpg",
  "description": "This is an excellent widget with 21 features and 4 colors."
}

Теперь из этих 60 полей мы можем запросить 20-25 полей. Это означает, что нам понадобятся индексы для всех этих полей.

Запрос, сформированный для этих полей, может иметь операторы равенства и неравенства. В запросе также могут быть операторы AND / OR / NOT.

Не будет необходимости в полнотекстовом поиске.

Для такого сценария предпочтительнее использовать ElasticSearch или MongoDB?

Я читал в одной статье, что поддержка более 5 индексов в mon go может замедлить запись. В таких случаях рекомендуется использовать ES.

Наши данные будут составлять около 200 ГБ. RPS будет 20 000.

1 Ответ

2 голосов
/ 14 апреля 2020

Хотя это не совсем ответ на ваш вопрос, этот должен дать вам некоторое представление о том, как выбрать систему, исходя из функциональных и нефункциональных требований.

Подходя к вашему основному требования, да, вам не нужно индексировать данные, по которым вы не выполняете поиск, используя опцию index , вы можете отключить индексацию определенного поля (Примечание по умолчанию - true). Это уменьшит размер вашего инвертированного индекса и улучшит производительность.

Вторая часть заключается в использовании контекста фильтра, поскольку у вас нет требований к полнотекстовому поиску, а Elasticsearch кэширует данные в контексте фильтра, что делает его очень быстрым, без использования внешней системы кеширования, такой как Redis, et c.

Более подробную информацию о кеше фильтра можно найти в https://www.elastic.co/guide/en/elasticsearch/reference/current/query-filter-context.html#filter -context official do c и цитирование того же самого: c:

Часто используемые фильтры будут автоматически кэшироваться Elasticsearch, чтобы повысить производительность.

Также,

В контексте фильтра предложение запроса отвечает на вопрос «Соответствует ли этот документ этому предложению запроса?» Ответ прост: да или нет - баллы не рассчитываются. Контекст фильтра в основном используется для фильтрации структурированных данных, например,

. Отпадает ли эта временная метка в диапазоне от 2015 до 2016 года? Установлено ли в поле состояния значение «опубликовано»

Что соответствует вашим точным требованиям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...