2013-05-13 3 views
5

Twitters Typeahead соответствует любому слову в любом месте фразы, поэтому для поиска результатов «автомобиль» результаты могут исходить из фразы со вторым словом, которое соответствует «автомобилю». Например, при поиске автомобиля в списке с визитной карточкой. Визитная карточка появляется и еще хуже оказывается перед автомобилем. IE:Как сделать Twitter Typeahead Точное совпадение слов и фраз

Search Term: Car 
Suggestions: 
Business Card 
Car 
Car Pool 
Carbon 

Я хочу, чтобы это было больше Google и щебетать, как (они не предполагают, что-то, что не соответствия именно то, что набирается с самого начала), где напечатали слово является наиболее актуальным, так автомобиль будет более актуальным при вводе автомобиля, чем в Business Card.

Я хочу, чтобы он фактически просто остановился, чтобы совместить второе слово, пока кто-то не наберет пробел и не запустит второе слово. Таким образом, в приведенном выше примере визитной карточки не будет отображаться в списке, если я не напечатал:

Business C 

Как я могу остановить это поведение сопрягать и предполагая, слова, которые не точное совпадение с начала поиска набранного.

Другой способ сказать, что это будет, как остановить typeahead от токенизации или разделения на пространство. Typeahead всегда соответствует началу слова (^), поэтому, если пространство не было распознано как граница слова, оно будет работать больше, как ожидали пользователи Google и twitters.

Спасибо за любую помощь, Тайлер

UPDATE 1.

Я обновил свой Dataset вернуть Datum, который имеет значение и маркер, так что метод машинописный _transformDatum не токенизировать лексемы разделив на пространство. Это прекрасно работает, и теперь он работает как желаемая:

значения: Apple, Great Ape

Поиск Term: Ap Предложения: Apple,

Это то, что я хочу. Но теперь есть новый вопрос.

ВОПРОС: При использовании поискового запроса с пробелом никаких предложений не возвращается.

Так что теперь, когда я типа "большие" предложения прекращается, как только я печатаю пространство .:

Критерий поиска: Большой (с пробелом) Предложения: (отсутствует)

I Думаю, что у токенов не может быть пробелов. Даже если в документации прямо не говорят об этом в выпуске:

Каноническая форма данности является объектом со свойством стоимости и лексемы собственности. value - это строка, представляющая базовое значение данных, а токены - это набор строк, которые помогают typeahead.js в сопоставлении данных с заданным запросом.

+0

Я решил космический вопрос редактирования метода 'getSuggestion' (https://github.com/twitter/typeahead .js/блоб/ведущий/SRC/dataset.js # L251). Я удалил вызов tokenizeQuery', просто применив 'toLowerCase()' к запросу. – franzlorenzon

ответ

1

Вы можете

$('.typeahead').typeahead({source:myarray, matcher: function(item){ 
    var reg = new RegExp('^'+this.query); 
    if(item.match(reg)) return true; 
    else return false; 
}}) 
+0

Спасибо за ответ, и я сожалею, что не уточнил, но это Твиттер Typeahead.js, не связанный с загрузкой. Я обновил свой пост, чтобы уточнить. –

1

склонный будет:

matcher: function (item) { 
     if (item.toLowerCase().indexOf(this.query.trim().toLowerCase()) == 0) { 
      return true; 
     } 
    }, 
+0

ваш ответ идет о typeahead, распространяемом с помощью twitter bootstrap v2 (bootstrap v3 не имеет typeahead). Речь идет о twitter typeahead, другом продукте. – jrochkind

Смежные вопросы