簡體   English   中英

更好地訂購mysql / php搜索結果

[英]Better ordering of mysql/php search results

我有一個mysql / php查詢,它搜索數據庫並根據用戶輸入的搜索字符串返回匹配,按標題升序排序,但我們真的希望按最佳匹配排序(類似於ElasticSearch對搜索結果進行排名的方式)。

目前,在搜索“quake II”時,結果列表如下所示:

- Quake
- Quake 4
- Quake II
- Quake III Arena

預期結果列表必須是:

- Quake II (corresponding exactly to the search)
- Quake III Arena (containing entirely the search)
- Quake
- Quake 4

目前的php / mysql查詢是:

$nameKeys = explode(" ", $gamenamethathasbeensearchedfor);
$query = "SELECT id FROM games WHERE GameTitle LIKE '%$nameKeys[0]%'";
for($i = 1; $i <= count($nameKeys); $i++)
{
    if($nameKeys[$i] != "" || $nameKeys[$i] != " " || $nameKeys[$i] != "  " || $nameKeys[$i] != "   ")
    {
        $query .= " AND GameTitle LIKE '%$nameKeys[$i]%'";
    }
}

我會在GameTitle上設置一個FullText索引,然后你可以利用MySQL的全文排序和排序的強大功能,而無需編寫一些復雜的查詢。 也就是說,如果您沒有使用InnoDB。 你也可以這樣做,

SELECT id, MATCH (GameTitle) AGAINST ('%$nameKeys[$i]%') AS SCORE FROM games WHERE MATCH (GameTitle) AGAINST ('%$nameKeys[$i]%') limit 10;

這應該讓你非常接近,而不必修改索引,但我建議檢查MySQL全文功能

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM