Автозаполнение с использованием TRIE с возможностью сделать середину предложения Query? - PullRequest
1 голос
/ 17 апреля 2019

Создание новой системы автозаполнения и требование поиска по ключевым словам, даже если они находятся в середине предложения. У меня ОГРОМНЫЙ список названий книг, например, "Автобиография Стива Джобса". Вместо того, чтобы вводить «Aut» в качестве префикса запроса, пользователь может выбрать «Steve» и все равно должен получить тот же результат. Как реализовать с помощью TRIE? Нужно ли мне несколько TRIE? Любая помощь в этом отношении будет очень полезна.

1 Ответ

0 голосов
/ 17 апреля 2019

Один из подходов для этого - добавить несколько input в поле completion.У меня когда-то был похожий случай использования с почтовыми адресами.Например, такой адрес, как «1000 Market St, San Francisco, CA 94103» должен появиться, когда пользователь начнет вводить один из следующих токенов:

  • 1000
  • Market
  • Market St
  • (также в конечном итоге) Сан-Франциско (в зависимости от размера)
  • (также в конечном итоге) 94103 (в зависимости от размера)

Так вЧтобы поддержать случай использования, идея заключалась в том, чтобы индексировать документ следующим образом:

PUT addresses/_doc/1
{
    "display": "1000 Market St, San Francisco, CA 94103",
    "suggest" : {
        "input": [ 
          "1000 Market St, San Francisco, CA 94103",
          "Market St, San Francisco, CA 94103",
          "San Francisco, CA 94103",
          "94103"
        ]
    }
}

Хорошо с адресами то, что они имеют структуру (номер улицы, направление улицы, название улицы и т. д.).В вашем случае с названиями книг это немного сложнее, поскольку не существует неявной структуры.Тем не менее, вы можете просто разделить ввод по каждому пробелу и индексировать часть, которая идет после пробела (без стоп-слов).Например, для «Автобиографии Стива Джобса» вы должны проиндексировать следующие данные:

  • Автобиография Стива Джобса
  • Стив Джобс
  • Джобс

Конкретно,

PUT books/_doc/1
{
    "display": "Autobiography of Steve Jobs",
    "suggest" : {
        "input": [ 
          "Autobiography of Steve Jobs",
          "Steve Jobs",
          "Jobs"
        ]
    }
}

Таким образом, когда пользователь вводит «Стив» или даже просто «Джобс», книга появляется.Вы также можете играть с весами, чтобы придать большее значение точному названию, чем другим вариантам.

Попробуйте и посмотрите, как оно получится.

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