Sphinx 使用 Snippets (Excerpts) 達成 Highlight 功能

2020.6.30

在 sphinx.conf 裡將全文欄位 myField 也設為 attribute

source mySource
{
    ....    
    xmlpipe_field_string = myField
    ....
}

select 語法,例如搜尋「法鼓」

SELECT SNIPPET(myField, '法鼓', 'exact_phrase=1') AS highlight FROM myIndex

如果要回傳整份文件,可以使用 將 limit 設為 0

SELECT SNIPPET(myField, '法鼓', 'exact_phrase=1', 'limit=0') AS highlight FROM myIndex

如果使用 not, near 等 extend syntax, 也可使用 query_mode 參數:

SELECT SNIPPET(myField, '"阿含 迦葉"~5', 'exact_phrase=1', 'limit=0', 'query_mode=1') AS highlight FROM myIndex

回傳如下結果:

"highlight": "不蘭<b>迦葉之見,長阿含</b>十七卷沙門果經,長部一卷沙門果經參照。"

參考資源: