2013-04-08 67 views
4

我試圖在使用純JavaScript的望遠鏡中實現搜索,因爲它看起來像FTS是流星實現的一段時間,我無法得到2.4與Meteor很好地玩。如何在流星/望遠鏡中實現全文搜索

我使用已經在Telescope中實現的現有分頁模型來顯示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:(新的文件,在/ common目錄)

// 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, 
    ... 
}) 

任何幫助將不勝感激!

+1

我們一直在爲自己複雜的訂閱而苦苦掙扎。也許直接聯繫Sacha + I會更有成效,我們可以共同設法解決問題。我認爲你可以找出我們的電子郵件地址:) – 2013-04-08 13:38:25

+0

你介意在GitHub上克隆望遠鏡,並將所有確切的更改推送到它?我做了一個非常簡單的搜索測試(https:// gist。github.com/yeputons/8807589)與兩個訂閱,並按預期工作。 – yeputons 2014-02-04 16:51:00

回答

2

有點晚了,但here是如何在流星中實現全文搜索的完整文章。

「不編輯任何Meteor代碼最簡單的方法就是使用自己的mongodb。」