Ответы пользователя по тегу Node.js
  • Как правильно создать индекс в ElasticSearch?

    onqu
    @onqu
    weasy
    1. Проверять ничего не надо, если данные не нужны, запрос на обновление всего документа аналогичен запросу на добавление. Запрос ниже либо создаст новый документ, либо полностью заменит существующий.

    PUT /компании/компания/{_id}
    {
        "навание": "SpaceX",
        "работники":  ...,
    }


    Если "hash" уникален для каждой копании, его можно использовать в качестве _id

    PUT /компании/компания/{hash}
    {
        ...
    }


    В более ранних версиях (до 1.5) можно было использовать alias для поля _id, которое может генерироваться автоматически:

    "mappings": {
        "компания": {
            // в текущей версии: 2.3 depricated - сказывалось на производительности
            "_id": {"path": "hash"},
            "properties": {
                "навание": {
                    "type": "string"
                },
                ...
            }
        }
    }


    2. В эластике нет, как таковых массивов, есть вложенные объекты. Любое поле документа может содержать множество значений, но значения должны быть одного типа. Тип может быть nested или object, nested позволяет производить более удобный поиск при множестве вложенных объектов.

    Если правильно понимаю, и должности разные, то будет удобнее использовать nested. Иначе object.

    "mappings": {
        "компания": {
            "properties": {
                "работники": {
                    "type": "nested",
                    "properties": {
                        "должность": {
                            "type": "string"
                        },
                        "имя": {
                            "type": "string"
                        }
                    }
                }
            }
        }
    }
    
    // создание/обновление
    PUT /компании/компания/{_id}
    {
        "название": "...",
        "hash": "...",
        "работники": [
            {
                "должность": "манагер",
                "имя": ["Анатолий", "Андрей"]
            },
            {
                "должность":  ["управляющий", "заместитель"]
                "имя": "Дмитрий"
            },
            {
                "должность": "кассир",
                "имя": ["Татьяна", "Анастасия"]
            },
        ]
    }
    
    // примерный поиск
    GET /компании/компания/_search
    {
        "query": {
            "nested": {
                "path": "работники",
                "query": {
                    "bool": {
                        "must": [
                            { "match": { "работники.должность": "управляющий" }},
                            { "match": { "работники.должность":  "кассир" }} 
                        ]
                    }
                }
            }
        }
    }
    Ответ написан
    8 комментариев
  • Как лучше организовать отчет от RabbitMQ?

    onqu
    @onqu
    weasy
    Site в данном случае сам должен ходить за пирожками.
    8Dh9rkX.png
    Ответ написан
    3 комментария
  • God why? Node JS Cron + MySQl (modules) ER_CON_COUNT_ERROR: Too many connections error!?

    onqu
    @onqu
    weasy
    В цикле открываем соединения? Получите ER_CON_COUNT_ERROR, распишитесь.

    for (;;) {
        connection.connect(...);
    }
    Ответ написан
    9 комментариев
  • Jade renderFile запустить параллельно с помощью async.parallel?

    onqu
    @onqu
    weasy
    Приветствую.

    Все верно, быстрее не будет. JS асинхронный, но не мультипоточный. Используйте child_process. Дочерним процессам отдавайте задания.
    Ответ написан
    Комментировать