我正在爲任意文本/短語實現類似autosuggest的功能。我想向用戶提供一些絕對的相關性,而不僅僅是發現項目相對於彼此的排名。 即,如果數據庫中的某些行按確切的形式和順序包含輸入的文本,則需要「1」左右的排序。我可以得到MySQL FULLTEXT [0; 1]範圍?
例如,讓我們對「我喜歡吃水果」搜索:
- 與內容‘當然我喜歡吃水果和vegitables’我希望排秩是還是有點減。
- 與內容行「我喜歡新鮮水果」我預計結果小於1,但還是相當高的,像0.7。
這可以用MySQL和FULLTEXT完成嗎? 而不是[0,1]我得到2.7或1.2或完全匹配的值爲0.6。它出什麼問題了?
這是我的測試表:
表數據:
id text
1 Lorem ipsum dolor
2 You can search an index, and organize and present search results.
3 The Search API can index any number of documents.
4 Each field has a name and a type.
5 Each field is required.
7 Cras dapibus. Vivamus elementum semper nisi.
8 Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim.
9 Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi.
10 Nam eget dui. Etiam rhoncus.
查詢1:
SET @str := 'Lorem ipsum dolor';
SELECT id, TEXT, MATCH (TEXT) AGAINST (@str) rank FROM test WHERE MATCH (TEXT) AGAINST (@str);
- >
id text rank
1 Lorem ipsum dolor 1.280059814453125
'1.28'是什麼意思?在這裏有'1'會很好。
查詢2:
SET @str := 'Each field is required.';
SELECT id, TEXT, MATCH (TEXT) AGAINST (@str) rank FROM test WHERE MATCH (TEXT) AGAINST (@str);
- >
id text rank
5 Each field is required. 1.7639520168304443
4 Each field has a name and a type. 0.8533731698989868
一個更完整的比賽,我希望 '1' 這裏。
問題3:
SET @str := 'Aenean leo ligula, porttitor eu';
SELECT id, TEXT, MATCH (TEXT) AGAINST (@str) rank FROM test WHERE MATCH (TEXT) AGAINST (@str);
- >
id text rank
8 Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. 3.5851094722747803
9 Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. 0.4266865849494934
此外全場比賽,和misterious '3.58' 被返回。
我不需要精確的數字,只是[0,1]之間的數字,以便我可以確定是否有完整(或幾乎完整)的匹配。如果結果完全包含搜索字符串,我需要0.8..1左右的內容。或者,也許這只是一個錯誤的工具? FULLTEXT實際上並不是全文,因爲我無法弄清楚它是否完全匹配。
非常感謝,並且在單個查詢中使用了'@ fedge'方法!它不能解決我的問題,但可以確保我不會錯過最相關的結果。 我需要[0,1]範圍,因爲:1)我不想顯示結果的相關性很低2)我想向用戶提供其他相關結果的提示/突出顯示/推薦標記(0.7到1例如),而不只是大多數排名第一。用戶體驗是我的首要任務。 – vladimir83
@ vladimir83當然 - 我不會打折你的目的,而是試圖指出如何通過一些小小的欺騙和後期處理來達到你需要的結果。該解決方案如何改變以滿足您的要求? (我認爲我必須在你的解釋中誤讀某些東西,因爲我還不清楚缺少什麼。) –