Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL全文搜索-搜索精确匹配的单词&;通配符,但先获得精确匹配,然后再进行其他匹配_Php_Mysql_Laravel - Fatal编程技术网

Php MySQL全文搜索-搜索精确匹配的单词&;通配符,但先获得精确匹配,然后再进行其他匹配

Php MySQL全文搜索-搜索精确匹配的单词&;通配符,但先获得精确匹配,然后再进行其他匹配,php,mysql,laravel,Php,Mysql,Laravel,我使用布尔全文搜索从数据库列中搜索单词。 我希望获得与我的记录完全匹配的记录&还包括通配符搜索。我得到了正确的结果,但我想先通过精确匹配来设置结果的顺序。有什么可能的方法来实现这一点吗 我还想对每个单词进行搜索&通过相关性获取记录 我尝试过使用下面的查询,但它不起作用,因为它为记录提供了错误的排名 SELECT id, search_tags, MATCH(search_tags) AGAINST(REPLACE(concat("'car'"," ")

我使用布尔全文搜索从数据库列中搜索单词。 我希望获得与我的记录完全匹配的记录&还包括通配符搜索。我得到了正确的结果,但我想先通过精确匹配来设置结果的顺序。有什么可能的方法来实现这一点吗

我还想对每个单词进行搜索&通过相关性获取记录

我尝试过使用下面的查询,但它不起作用,因为它为记录提供了错误的排名

    SELECT
      id,
      search_tags,
      MATCH(search_tags) AGAINST(REPLACE(concat("'car'"," ")," ","* ")  IN BOOLEAN MODE) AS relevance_rank
    FROM
      images
    WHERE
      MATCH(search_tags) AGAINST(REPLACE(concat("'car'"," ")," ","* ")  IN BOOLEAN MODE)
    ORDER BY relevance_rank DESC;
我希望查询的输出是

   id  search_tag             relevance_rank
   11  car,cards,food,code    2.1669161319732666
   12  car,water,sky          2.1669161319732665
   13  carrier,food,drink     2.1669161319732664
,但实际输出如下

   id  search_tag             relevance_rank1
   11  carrier,food,drink     2.1669161319732666
   12  car,cards,food,code    2.1669161319732666
   13  car,water,sky          2.1669161319732666

使用联合时应能正常工作

SELECT
  id,
  search_tags,
  MATCH(search_tags) AGAINST(REPLACE(concat("'car'"," ")," "," ")  IN BOOLEAN MODE) AS relevance_rank,
1 as prio -- sort by priority first
FROM
  images
WHERE
  MATCH(search_tags) AGAINST(REPLACE(concat("'car'"," ")," "," ")  IN BOOLEAN MODE)
ORDER BY relevance_rank DESC 
UNION SELECT
  id,
  search_tags,
  MATCH(search_tags) AGAINST(REPLACE(concat("'car'"," ")," ","* ")  IN BOOLEAN MODE) AS relevance_rank,
 2 as prio -- sort by priority first
FROM
  images
WHERE
  MATCH(search_tags) AGAINST(REPLACE(concat("'car'"," ")," ","* ")  IN BOOLEAN MODE)
ORDER BY prio, relevance_rank DESC;

此查询将记录的整个单词排名较高,但
car、cards
的排名与
car
的排名相同,因此它仍然不是最优的

SELECT id, search_tags, 
    MATCH(search_tags) AGAINST('car *') + 
    MATCH(search_tags) AGAINST('car') AS relevance_rank
FROM images
WHERE MATCH(search_tags) AGAINST('car *') 
OR MATCH(search_tags) AGAINST('car')
ORDER BY 3 DESC
+----+---------------------+----------------+------------+ |id |搜索|标记|相关性|排名|出现次数| +----+---------------------+----------------+------------+ |12 |汽车、卡片、食品、代码| 0.1677478002 | 2| |13 |汽车、水、天空| 0.1677478002 | 1| |11 |载体、食品、饮料| 0.0093915509 | 1| +----+---------------------+----------------+------------+
我认为你应该使用laravel Scout:@DharmeshRakholia-但我已经使用了全文搜索,laravel Scout使用了相同的搜索。我没有使用MVC结构,所以不可能继续使用Laravel Scout。你还有别的办法吗?可能是@JorisJ1的复制品-我的问题不仅是为了秩序,而且我还有相同等级的混乱。你知道为什么它会有相同的排名吗?对不起,我删除了重复的旗帜。不,我还没有答案,但今天晚些时候我会再看一遍。 +----+---------------------+----------------+ | id | search_tags | relevance_rank | +----+---------------------+----------------+ | 12 | car,cards,food,code | 0.1677478002 | | 13 | car,water,sky | 0.1677478002 | | 11 | carrier,food,drink | 0.0093915509 | +----+---------------------+----------------+
SELECT id, search_tags, 
    MATCH(search_tags) AGAINST('car *') + 
    MATCH(search_tags) AGAINST('car') AS relevance_rank,
    LENGTH(search_tags) - 
    LENGTH(REPLACE(search_tags, 'car', space(LENGTH('car')) -1 )) AS occurences
FROM images
WHERE MATCH(search_tags) AGAINST('car *') 
OR MATCH(search_tags) AGAINST('car')
ORDER BY 3 DESC, 4 DESC
+----+---------------------+----------------+------------+ | id | search_tags | relevance_rank | occurences | +----+---------------------+----------------+------------+ | 12 | car,cards,food,code | 0.1677478002 | 2 | | 13 | car,water,sky | 0.1677478002 | 1 | | 11 | carrier,food,drink | 0.0093915509 | 1 | +----+---------------------+----------------+------------+