Автодополнение/живой поиск

Здравствуйте, уже несколько дней мучаюсь над реализацией автодополнения.
К примеру у нас есть документ с title: "маша ходила за зайцем и искала помидор".
Я пытаюсь сделать так чтоб пользователь мог найти этот документ по таким запросам:
"маша искала помидор"
уша помидыр искала"
"зайцем"
и тд

Пробовал разные вариации Suggests, и не как не получаеться добиться ожидаемого результата.
С последнего использовал completion suggester, но получилось искать только последовательно, (мжша ходила...) если пробовать "муша зайцем" - уже не находит документ.

Просьба направить меня в нужное русло. Документацию по suggesters прочитал несколько раз, но из-за слабого владения языком, видимо, утерял некоторые особенности, которе помогли бы мне в моей задачей

DELETE /local_organizations

PUT local_organizations
{
  "mappings": {
    "properties": {
      "suggest": {
        "type": "completion"
      },
      "name": {
        "type": "keyword"
      }
    }
  }
}

POST /local_organizations/_doc
{
  "suggest": "маша ходила за зайцем и искала помидор"
}

POST /local_organizations/_search?pretty=true
{
  "suggest": {
    "compliter": {
      "text": "маша искала помидор",
      "completion": {
        "field": "suggest",
        "size": 5,
        "fuzzy": {
          "fuzziness": "auto"
        }
      }
    }
  }
}

Если надо найти документ, то не очень понятно зачем нужен suggester, чтобы найти, надо просто искать.

DELETE /local_organizations

PUT local_organizations
{
  "mappings": {
    "properties": {
      "suggest": {
        "type": "text"
      }
    }
  }
}

POST /local_organizations/_doc
{
  "suggest": "маша ходила за зайцем и искала помидор"
}

POST local_organizations/_search
{
  "query": {
    "match": {
      "suggest": "маша искала помидор"
    }
  }
}

POST local_organizations/_search
{
  "query": {
    "match": {
      "suggest": "муша помидыр искала"
    }
  }
}

POST local_organizations/_search
{
  "query": {
    "match": {
      "suggest": "зайцем"
    }
  }
}

Забыл в самом сообщении написать, что это будет живой поиск. Юзер вводит текст, аяксом идут запросы на эластик. Пользователь сразу видит подсказки, основанные на самом тексте. (хороший пример - поисковые системы, которые предугадывают чуть ли не целые предложения по первым символам)
Каждая подсказка, это документ. По нажатию на подсказку, я беру _id документа и использую его в другом поиске.
На сколько я понял, обычный поиск не сильно годиться для этого, лучше использовать suggests.
п.с. только начал изучать эластик, и пытаюсь сделать все максимально правильно

Обычный поиск годится для того, что вы хотите добится, он просто не оптимизирован для работы в живом поиске. Suggester - оптимизирован (из него убраны все дополнительные функции, которые присутствуют в поиске) но он не предоставляет нужные вам функции.

Спасибо за подсказку, буду с обычным поиском пробовать

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.