Ответы пользователя по тегу Elasticsearch
  • Как написать агрегирующий запрос?

    @Vdm17
    PHP Developer
    А каким образом ElasticSearch узнает что надо фразу "Коммутатор Connexium 14TX/2 бюджетный" разбить на несколько вариантов с перебором слов, причем каждый раз "Коммутатор" должно быть в начале?

    Как вариант - попробуйте вручную генерировать варианты запросов. Например, для приведенной вами фразы должно получиться дополнительное поле с массивом:
    ["Коммутатор", "Коммутатор Connexium", "Коммутатор бюджетный", "Коммутатор Connexium 14TX/2"]

    И уже по этому полю можно будет писать аггрегацию.
    Ответ написан
    Комментировать
  • Как правильно обновлять/переиндексировать?

    @Vdm17
    PHP Developer
    Первое что приходит в голову - используйте вариант, описанный тут: https://www.elastic.co/guide/en/elasticsearch/guid...

    Хорошо описан вариант как сделать ре-индекс без остановки приложения.

    По поводу того, что делать с документами, которые могут быть изменены в процессе выполнения реиндекса. Есть несколько вариантов.

    Можете использовать вариант, предложенный Захаров Александр - дополнительное поле с датой обновления документа. В таком случае вам надо будет после реиндекса сделать еще дополнительно проход по старому индексу и найти документы с отличающимися датами.
    Второй вариант - использовать вместо дат версии документов. Но! Для этого документы во время реиндекса надо переносить вместе с номерами версий (иначе, они все будут добавлены с _version=1).
    Третий вариант - комбинация первых двух - использовать свое специальное поле для версий документов и сказать об этом ES - у него есть поддержка использования "внешних версий".

    И во втором и в третьем варианте, все равно после реиндекса надо проходить по старому индексу и определять какие документы поменялись.
    Худший случай, который вы можете получить: вы делаете реиндекс, в это время в старом индексе меняют документ X. Реиндекс завершается, начинается поиск изменений. В это время документ X снова меняют, но уже в новом индексе. В процессе поиска изменений вы видите что документ X был изменен в старом индексе и его надо перенести в новый - а тут он уже тоже снова изменен. Что делать в таком случае - решать вам. Все зависит от важности данных и можно ли объединить изменения.
    Ответ написан
    Комментировать
  • Как заставить elasticsearch работать правильно?

    @Vdm17
    PHP Developer
    Скорее всего ES выполнил стандартный поиск с помощью Term Query. В этом случае не происходит никакой сортировки, кроме как по "score" (по релевантности).
    Для вашего случая вам скорее надо использовать
    Prefix Query - https://www.elastic.co/guide/en/elasticsearch/refe...
    или
    Match Phrase Prefix Query - https://www.elastic.co/guide/en/elasticsearch/refe...
    Ответ написан
    Комментировать
  • Как правильно организовать данные в индексе в Elasticsearch?

    @Vdm17
    PHP Developer
    Если это будут просто массивы данных, то достаточно использовать стандартный маппинг для поля и обычные запросы query term/terms.

    Минимальный маппинг (ES 5.0+)
    ...
    "param": {"type": "keyword"}
    ...


    При заполнении данных просто передаете массив значений. Дополнительно ничего настраивать не надо.

    Поиск по одному значению (пример запроса для Sense)
    GET your_index/your_type/_search
    {"query": {"term": {"param": {"value": "2"}}}}


    Поиск по нескольким значениям (пример запроса для Sense)
    GET your_index/your_type/_search
    {"query": {"terms": {"param": ["2", "1"]}}}


    Примерно вот так.
    Ответ написан
  • Как удалить много записей из elasticsearch?

    @Vdm17
    PHP Developer
    Для ES 5.0+ есть DeleteByQuery API
    https://www.elastic.co/guide/en/elasticsearch/refe...

    POST index_name/type_name/_delete_by_query
    {
      "query": {
        "bool": {
          "must": [
            {"term": {"SITE_ID": "z"}}
          ],
          "should": [
            {"term": {"FILE_ID": "x"}},
            {"term": {"FILE_ID": "y"}},
            ...
          ],
          "minimum_should_match": 1
        }
      }
    }
    Ответ написан