Как сделать Twitter Typeahead с точным соответствием слов и фраз

Твиттер 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 сопоставлять данные с заданным запросом.


person Tyler Carver    schedule 13.05.2013    source источник
comment
Я решил проблему с местом, отредактировав метод getSuggestion (github.com/twitter/typeahead.js/blob/master/src/dataset.js#L251). Я удалил вызов tokenizeQuery, просто применив toLowerCase() к запросу.   -  person franzlorenzon    schedule 22.01.2014


Ответы (2)


подходящим будет:

  matcher: function (item) {
      if (item.toLowerCase().indexOf(this.query.trim().toLowerCase()) == 0) {
          return true;
      }
  },
person Ankish Jain    schedule 13.09.2013
comment
ваш ответ касается шрифта, распространяемого с помощью twitter bootstrap v2 (bootstrap v3 не имеет шрифта). Вопрос о twitter typehead, другом продукте. - person jrochkind; 31.10.2013

Ты сможешь

$('.typeahead').typeahead({source:myarray, matcher: function(item){
    var reg = new RegExp('^'+this.query);
    if( item.match(reg) ) return true;
    else return false;
 }})
person FUD    schedule 13.05.2013
comment
Спасибо за ответ, и мне жаль, что я не уточнил лучше, но это Typeahead.js Twitter, не связанный с начальной загрузкой. Я обновил свой пост, чтобы уточнить. - person Tyler Carver; 13.05.2013