2011-08-25 101 views
3

我使用Sphinx提供搜索到一個網站,並且在返回相關結果時遇到了一些障礙。獅身人面像搜索完全匹配,然後中綴匹配

爲了讓我的問題簡單化,我們假設我有兩個字段,@title和@body,它們分別加權爲100 & 15。當我搜索這個詞一樣「」小話,我想有它的排名確切的搜索詞更高,然後支票火柴匹配「在* | *在| *在*」和排名稍低。有什麼辦法可以爲您的搜索提供這種類型的特異性?

示例結果 '':

  1. 印度食品
  2. 中東
  3. 文檔關於拉美

一些相關的設置爲:

的sphinx.conf

morphology    = stem_en 
charset_type   = utf-8 
min_word_len   = 2 
min_prefix_len   = 0 
min_infix_len   = 2 
enable_star    = 1 

的search.php

$sp->SetMatchMode(SPH_MATCH_EXTENDED2); 
$sp->SetRankingMode(SPH_RANK_PROXIMITY_BM25); 
$sp->SetFieldWeights (array('title' => 100, 'body' => 15)); 

此外,作爲一個側面說明:我也有一些情況,其中部分匹配甚至不出現在搜索結果中。例如,我已搜索母牛牛仔未顯示。我也搜索了CowbCowbo直到我輸入牛仔,我收到了預期的結果。有什麼想法嗎?


這個問題是沿着相同的路線爲this previous SO question,但我希望我已經給了更多的細節,以我的問題,我已經盡力保證解決的事情。

+0

是他們的,我可以添加,以幫助人們回答這個問題的任何其他項? – ServAce85

回答

3

看起來像形態牛與牛仔無關。明星被啓用,你可以查詢從「牛」到「牛*」,它會發現所有的話改變

  1. 使用詞形等與奶牛檔案>牛仔
  2. 你可以解決這個問題有兩種方式從「牛」開始。

看待爲「在」和而不同的排名「」我可以建議在指數二體領域,讓說:身體和body_star從體字段相同的內容。

在搜索。php

$sp->SetRankingMode(SPH_RANK_PROXIMITY_BM25); 
$sp->SetMatchingMode(SPH_MATCH_EXTENDED2); 
$sp->SetFieldWeights (array('title' => 20, 'body' => 15, 'body_start' => 5)); 
$sp->Query("@body in @body_star *in* @title in"); 

這應該可以做到。

+0

我喜歡閱讀看起來優雅的解決方案。我將不得不圍繞「牛仔」問題進行一些討論,但我真的很喜歡你的建議,以解決如何解決'進'問題。偉大的建議! (就是......直到有人出現並告訴我不同​​;)當我測試它時,我會接受它作爲正確的答案,假設它有效。 – ServAce85