Я попытался выполнить поиск в телескопе с использованием чистого javascript, так как выглядит FTS для Meteor, и я не мог получить 2.4, играя красиво с Meteor.Как реализовать полнотекстовый поиск в Метеор/Телескоп
Я использую существующую модель разбивки на страницы, которая уже реализована в телескопе, чтобы отображать сообщения Top/New/Best, а также переменную сеанса для ключевого слова поиска, установленного в маршрутизаторе при навигации по, например,/Поиск/Foobar.
Однако, похоже, что это не работает; когда у меня есть, скажем, 100 сообщений, регулярная подписка на страницы только возвращается с 25 из них, и мои результаты поиска показывают только сообщения в начале 25.
Я несколько дней стуча головой о стену отлаживать это: иногда это работает, иногда это не так!
Вот код (я включил весь дополнительный код поиска для справки):
app.js:
var resultsPostsSubscription = function() {
var handle = paginatedSearchSubscription(10, 'searchResults');
handle.fetch = function() {
return limitDocuments(searchPosts(Session.get('keyword')), handle.loaded());
};
return handle;
};
var resultsPostsHandle = resultsPostsSubscription();
paginated_sub.js:
Я продублировал существующий paginatedSubscription, потому что я не могу передать Session var в качестве arg; он должен быть динамичным. Я, вероятно, реорганизую позже.
paginatedSearchSubscription = function (perPage/*, name, arguments */) {
var handle = new PaginatedSubscriptionHandle(perPage);
var args = Array.prototype.slice.call(arguments, 1);
Meteor.autosubscribe(function() {
var subHandle = Meteor.subscribe.apply(this, args.concat([
Session.get('keyword'), handle.limit(), function() { handle.done(); }
]));
handle.stop = subHandle.stop;
});
return handle;
}
search.js: (новый файл, в/общий каталог)
// get all posts where headline, categories, tags or body are LIKE %keyword%
searchPosts = function(keyword) {
var query = new RegExp(keyword, 'i');
var results = Posts.find({ $or: [ { 'headline': query }, { 'categories': query }, { 'tags': query }, { 'body': query } ] });
return results;
};
publish.js:
Meteor.publish('searchResults', searchPosts);
posts_list.html:
<template name="posts_results">
{{> posts_list resultsPostsHandle}}
</template>
posts_list.js:
Template.posts_results.resultsPostsHandle = function() {
return resultsPostsHandle;
};
router.js: есть панель поиска в нав, что перенаправляет здесь
posts_results = function(keyword) {
Session.set('keyword' , keyword);
return 'posts_results';
};
Meteor.Router.add({
...
'/search/:keyword':posts_results,
...
})
Любая помощь будет принята с благодарностью!
Мы много боролись с этими сложными подписками. Возможно, было бы более плодотворно напрямую связаться с Sacha + I, и мы можем вместе попытаться понять это. Я думаю, вы можете узнать наши адреса электронной почты :) –
Не могли бы вы клонировать телескоп на GitHub и нажимать на него все свои точные изменения? Я сделал очень простой поисковый тест (https: // gist.github.com/yeputons/8807589) с двумя подписками и работает так, как ожидалось. – yeputons