2012-09-04 25 views
3

如果用戶搜索solr索引中非常常見的關鍵字,我希望能夠返回有用的記錄。例如education如何處理非常常見的關鍵字搜索

在這種情況下,接近99%的記錄會在其中包含該單詞。所以搜索這個詞或類似的需要很長時間。

這是用於solr在ColdFusion,但我打開解決方案是孤立的solr。

現在我正在想出一個停用詞表,並防止這些搜索完全發生。

+1

我假設搜索花了很長時間,因爲CFSEARCH正試圖抓取所有結果,而不是頂部(比如說)100個結果?您可以通過不使用CFSEARCH並使用Solr的Web服務來避免這種情況。有關更多信息,請參閱http://www.thefaberfamily.org/search-smith/coldfusion-solr-tutorial/。 –

+0

不知道我是如何忘記這一點的,但CFSEARCH標記也具有'maxrows'屬性 - 所以如果搜索需要的時間長度是問題,那麼應該解決它。 –

+1

人們真的搜索「教育」嗎?如果您將簡歷編入索引,並且所有/大部分簡歷中都包含「教育」,「經驗」或「客觀」兩個字,我會讓他們成爲噪音詞。 –

回答

2

如果搜索需要很長時間,可能是因爲您沒有限制返回結果的數量。 <cfsearch>標記具有maxrows屬性以及startrow屬性,您可以使用該屬性來限制或分頁數據。另外,還可以通過電話<cfhttp>直接調用Solr的Web服務:

<cfhttp url="http://localhost:8983/solr/<collection_name>/select/?q=<searchterm>&fl=*,score&rows=100&wt=json" /> 

的Solr將返回10行默認;你可以用rows參數來改變它。您也可以使用start參數(請注意,Solr從0開始計數,而不是1)。我相信這個解決方案更加靈活,尤其是如果您使用CF 9,因爲它允許您在分數以外的區域進行分類時進行分頁。

你可以在這裏找到更多的細節: http://www.thefaberfamily.org/search-smith/coldfusion-solr-tutorial/

+0

好的,現在我正在將搜索結果與使用查詢查詢的查詢相結合,所以我將不得不找出一些方法使這項工作更好。 –

+0

您可以使用上述方法做類似的操作,方法是使用queryNew()創建一個新的查詢,並使用反序列化JSON結果的結果填充它。 –

+0

主要問題是,如果我想按來自其他查詢的字段進行排序,並且只抽出第一個x記錄,當按受歡迎度排序時,如果我剪下了,我可能不會獲得最受歡迎的記錄關閉搜索結果。 –

0

如果只是一個術語,它是非常常見的用戶搜索,那麼你需要限制你的結果和建議,有太多的匹配用戶。

在更一般的情況下,您希望執行兩遍(至少)的方法。搜索您的搜索字詞並執行查找以確定其「共同性」。您希望首先根據最不常用的術語進行過濾,最後使用更常見的術語。例如,用戶搜索serendipitous education。您確定您有serendipitous的11個匹配項,以及education的900000匹配項。因此,您首先應用serendipitous篩選器,從而導致11場比賽。然後應用education過濾器,從而產生7場比賽。

快速搜索的關鍵是索引和預計算統計。如果你有這樣的統計資料,你可以動態地創建一個優化的方法。