2017-07-03 122 views
0

這是我的搜索請求:在獅身人面像中使用通配符時如何提高精確匹配結果的相關性?

(new SphinxSearch()) 
     ->search((new SphinxClient())->escapeString($query) . '*', 'services') 
     ->setMatchMode(SphinxClient::SPH_MATCH_EXTENDED) 
     ->setFieldWeights([ 
      'name' => 10, 
      'legal_name' => 10, 
      'description' => 10, 
      'keywords' => 10, 
      'category_name' => 3, 
      'categories' => 3, 
     ]) 
     ->setSortMode(SphinxClient::SPH_SORT_EXTENDED, "@weight DESC") 
     ->setRankingMode(SphinxClient::SPH_RANK_SPH04) 
     ->get(true); 

這裏是指數的配置:

index services 
{ 
    source = services 
    path = /var/lib/sphinxsearch/data/services 
    docinfo = extern 
    morphology = stem_enru 
    min_stemming_len = 1 
    min_word_len = 1 
    min_infix_len = 1 
    html_strip = 1 
    index_exact_words = 1 
    expand_keywords = 1 
    mlock = 0 
    charset_table = 0..9, A..Z->a..z, _, *, -, a..z, \ 
         U+2C->U+2E, U+2E, U+0044, U+0046, U+0130, U+0401->U+0435, U+0451->U+0435, U+410..U+42F->U+430..U+44F, U+430..U+44F 
} 

對於查詢「學校№4」將返回所有相關結果,但類似「學校№42「在頂部和」學校№4「的確切比賽接近結果集的底部。
嗯,它實際上並不是一個確切匹配 - 在服務名稱中可能有一些其他的詞和符號。但它最接近用戶在搜索字段中輸入的內容,所以我認爲它應該比使用通配符的結果更相關。

如何將「精確」匹配移動到集合的頂部?

P.S.我正在使用this Laravel的SphinxClient特定包裝,雖然我不認爲這很重要。

回答

0

辦法之一,試試expand_keywords選項 http://sphinxsearch.com/docs/current.html#conf-expand-keywords

都不可能改善搜索質量,具有精確的形式匹配的文件應該比莖或綴匹配的文檔的排名普遍較高。

唉這是一個索引級配置,而不是查詢。然後可以從查詢中刪除*。

+0

我有這個選項啓用。我嘗試刪除通配符,但只返回完全匹配(「學校4」,沒有「學校42」)。禁用此選項對結果集沒有明顯影響。 –

+0

更改選項時是否重建索引? – barryhunter

+0

當然可以。 –

0

我現有的解決方案 - 使用和不使用通配符進行兩個查詢,然後將結果與頂部的精確匹配進行合併。它工作,但顯然不理想。

相關問題