Твиттер Typeahead соответствует любому слову в любом месте фразы, поэтому результаты поиска «автомобиль» могут быть получены из фразы со вторым слово, которое соответствует слову "автомобиль". Например, при поиске автомобиля в списке с визитной карточкой. Появляется визитка и, что еще хуже, появляется перед автомобилем. IE:
Search Term: Car
Suggestions:
Business Card
Car
Car Pool
Carbon
Я хочу, чтобы это было больше похоже на google и twitter (они никогда не предлагают что-то, что не соответствует точно тому, что было напечатано с самого начала), где напечатанное слово является наиболее релевантным, поэтому автомобиль будет более релевантным при вводе автомобиля, чем визитная карточка.
Я хочу, чтобы он на самом деле просто ПРЕКРАТИЛ соответствие второму слову, пока кто-то не введет пробел и не начнет второе слово. Таким образом, в приведенном выше примере визитная карточка не появится в списке, если я не наберу:
Business C
Как я могу остановить это поведение сопоставления и предложения слов, которые не являются точным совпадением с начала введенного поиска.
Другой способ сказать это - как остановить токенизацию или разделение шрифта в пространстве. Заголовок всегда соответствует началу слова (^), поэтому, если бы пробел не был распознан как граница слова, он работал бы больше, чем ожидали пользователи Google и Twitter.
Спасибо за любую помощь, Тайлер
ОБНОВЛЕНИЕ 1.
Я обновил свой набор данных, чтобы вернуть Datum, который имеет значение и токен, чтобы метод typeahead _transformDatum не токенизировал токены путем разделения на пробел. Это прекрасно работает, и теперь оно работает так, как хотелось бы:
Значения: яблоко, великая обезьяна
Критерий поиска: Предложения приложений: Apple
Это то, чего я хочу. Но теперь появилась новая проблема.
ПРОБЛЕМА: при использовании поискового запроса с пробелом предложения не возвращаются.
Итак, теперь, когда я набираю «отлично», предложения останавливаются, как только я набираю пробел.:
Поисковый запрос: Отлично (с пробелом) Предложения: (нет)
Я думаю, что токены НЕ могут иметь пробелов. Несмотря на то, что документация прямо не говорит об этом в проблеме:
Каноническая форма данных — это объект со свойством значения и свойством токена. value — это строка, представляющая базовое значение данных, а tokens — это набор строк, которые помогают typeahead.js сопоставлять данные с заданным запросом.
getSuggestion
(github.com/twitter/typeahead.js/blob/master/src/dataset.js#L251). Я удалил вызовtokenizeQuery
, просто применивtoLowerCase()
к запросу. - person franzlorenzon   schedule 22.01.2014