這是我的搜索請求:在獅身人面像中使用通配符時如何提高精確匹配結果的相關性?
(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特定包裝,雖然我不認爲這很重要。
我有這個選項啓用。我嘗試刪除通配符,但只返回完全匹配(「學校4」,沒有「學校42」)。禁用此選項對結果集沒有明顯影響。 –
更改選項時是否重建索引? – barryhunter
當然可以。 –