A. lucene按匹配度排序是怎麼做到的
Lucene的搜索結果默認按相關度排序,這個相關度排序是基於內部的Score和DocID,Score又基於關鍵詞的內部評分和做索引時的boost。默認Score高的排前面,如果Score一樣,再按索引順序,先索引的排前面。那麼有人問了,如果我要先索引的排後面怎麼辦呢?隱士研究了源碼後發現這是相當簡單的事情。以下代碼基於Lucene 2.0。
看Sort的默認構造函數,相關度就是SortField.FIELD_SCORE和SortField.FIELD_DOC的組合。
java 代碼
/**
* Sorts by computed relevance. This is the same sort criteria as calling
* {@link Searcher#search(Query) Searcher#search()}without a sort criteria,
* only with slightly more overhead.
*/
public Sort() {
this(new SortField[] { SortField.FIELD_SCORE, SortField.FIELD_DOC });
}
那麼該如何構造我們需要的SortField呢?請看SortField的一個構造函數,有一個參數reverse可供我們調整結果集的順序。
java 代碼
/** Creates a sort, possibly in reverse, by terms in the given field with the
* type of term values explicitly given.
* @param field Name of field to sort by. Can be <code>null</code> if
* <code>type</code> is SCORE or DOC.
* @param type Type of values in the terms.
* @param reverse True if natural order should be reversed.
*/
public SortField (String field, int type, boolean reverse) {
this.field = (field != null) ? field.intern() : field;
this.type = type;
this.reverse = reverse;
}
由此可見,只要構造一個SortField[]就可以實現我們要的功能,請看:
java 代碼
// 評分降序,評分一樣時後索引的排前面
new SortField[] { SortField.FIELD_SCORE, new SortField(null, SortField.DOC, true) }
// 評分升序,評分一樣時後索引的排前面,呵呵,此為最不相關的排前面,挺有趣的
new SortField[] { new SortField(null, SortField.SCORE, true), new SortField(null, SortField.DOC, true) }
呵呵,只要將此SortField[]作為參數傳入Sort的構造函數得到Sort的一個instance,將此instance傳入searcher.search(query, sort)即可得到了期望的結果。
B. 計算機畢業設計的源代碼
之前看到很多同學都在找論文的源代碼,我收藏了個網站,鍵盤論文網,上面有很多計算機專業的畢業設計,包含了對應的源代碼,你參考下吧
之前的一篇文章,關於php中文分詞技術的
摘要:
論文以站內中文全文搜索技術為背景,結合PHP(PHP:Hypertext Preprocessor)在實踐領域中對Web應用的性能和內存消耗的要求,提出了一種純PHP的以預索引字典為基礎的輕量高效的站內中文搜索引擎的解決力案。
主要內容:通過索引器在資料庫中保存生成的站內全文數據的帶權重索引和詞頻權重索引,檢索器基於此全文數據可以按多個類別的權重定義計算相關度得到搜索結果,表示器將結果高亮排序返回給搜索用戶完成搜索功能。
一個基於海量字典的中文分詞器作為中文數據處理的核心,將中英文及數字信息正確的切分並使得索引器可以進行按詞彙權重索引,實現豐富靈活的搜索或索引相關功能。
文章針對PHP站內中文搜索技術中最突出的三個方面進行研究。
1)輕量高效的PHP中文搜索框架設計,並統一考慮了檢索器和索引器的中文分詞問題,使得索引和搜索時處理同樣的分詞結果。這樣,在以較小的代價保證分詞器90%以上准確度的同時,對不準確的分詞結果具有很好的容忍度,保證了PHP應用的輕量性和可用性。對實踐中對性能非常敏感的Web應用的設計開發有一定的借鑒意義。
2)對站內數據的搜索結果提出了一種多權重因素的相關度計算的方法,該方法在傳統的關鍵字權重相關度的基礎上,結合HTML標記進行權重識別和統計,並通過文檔屬性和統計數據等類別增加了用戶可干涉的相關度權重因素,有力地保障了搜索結果的有效性,提升了用戶的站內搜索體驗。
3)為了提升中文分詞的質量,並同時解決PHP應用在處理海量詞典時的性能和內存消耗的問題,本文通過優化的分詞匹配演算法和創新性地在PHP中文分詞中使用B-Tree預索引詞典,以數量達53萬多個的UTF-8簡繁體中文詞彙在保證了較好的分詞結果的同時保持了中文搜索的輕量性和高效性。並在實踐中證明具有良好的可用性和通用性,具有較低的演算法時間復雜度。
創新點:
本文結合PHP技術以及搜索引擎、中文分詞等理論背景,對PHP領域內實現輕量高效的站內中文搜索提出了行之有效的分析解決方法。
隨著Web應用的持續發展和PHP普遍應用、中文信息處理需求的持續增長,本文所論述的方法對PHP相關范圍內的中文搜索或索引相關功能都有一定的指導意義。
同時,隨著先進的搜索引擎技術模型的演進,本文所做的分析研究為中文站內搜索的普適性應用進行了一項有意義的探索。
你參考下吧
C. 請問相關的軟體編程人員 源代碼在哪種情況下會給客戶
只有在事先簽署合約的時候,明確說要源碼的話才給他,不然的話就只給個成品的程序給他就行了,因為他叫你是幫他做個軟體,而不是說為他做個軟體,這個是不一樣的,幫他做軟體的話就只是單純的僱傭關系,為他做軟體的話則是另一種情況,如果說他只是你的顧客,合約上有沒有說明。就給他個成品的就行了,他耍賴的話就告他,反正道理在你這邊
嘻嘻,上面說的「為他做軟體」這個就是項目的開發,要給源碼的