2

我真的一直用这个在墙上敲打我的头,我需要一些帮助。我有一个不到 900 条记录的 MYSQL 数据库。我必须跨多个列进行全文搜索,但它似乎不起作用。当我搜索“LName”字段时,它会显示一些记录,例如,如果我搜索“Smith”,当数据库包含 8 行时,它会返回 7 行。当我搜索单个姓氏“Albritton”时,它不会当我知道它存在时,根本找不到它。这适用于数据库中的许多记录。你搜索,它似乎不存在,即使我知道它存在。

我正在执行 SELECT / FROM / WHERE / OR 来搜索 Lname、Fname、City、State 等,但它只会搜索 LNAME,而且它仍然只会返回部分结果。

经过数小时的在线搜索,我决定在表上创建一个索引并进行搜索索引 WHERE MATCH 搜索,这很有效,但我仍然得到相同的有限结果。我正在使用 PHPMYADMIN 并运行了分析和修复,但它说它很好并且没有任何改变。

根据我所读到的,对于这么小的表,我最好根本不使用索引,我对此很好,但似乎都不能正常工作。

此外,我创建的所有索引的基数都是“1”,这似乎不正确。

我将在此处粘贴我的 search.PHP。请原谅乱七八糟的东西,我整晚都在尝试。任何帮助表示赞赏。

/* $result = mysql_query ("SELECT * FROM attorney WHERE lname LIKE '%$keyword%'
OR
fname LIKE '%$keyword%'
OR
phone LIKE '%$keyword%'
OR
bizname LIKE '%$keyword%'
OR
address LIKE '%$keyword%'
OR
city LIKE '%$keyword%'
OR
zip LIKE '%$keyword%'

ORDER BY if(lname = '' or lname is null,1,0), lname ASC, fname $limit"); */
$result = mysql_query ("SELECT * FROM attorney USE INDEX (index1) WHERE MATCH (lname, fname, city, state, zip) AGAINST ('%$keyword%' IN BOOLEAN MODE)

");


$row = mysql_fetch_array($result);
if (!$result) 
    {
    die("Error: Data not found..");
    }

ETC...

4

1 回答 1

2

您不需要%在全文搜索中使用。

尝试这个:

SELECT  *
FROM    attorney
WHERE   MATCH (lname, fname, city, state, zip) AGAINST ('+Smith' IN BOOLEAN MODE)

另请注意,长度小于 4 个字符的单词不会被索引,也不会使用默认MySQL设置进行搜索。

如果您需要搜索短词,请添加

ft_min_word_len = 1

然后重建my.cnf全文索引。

于 2013-04-04T07:37:12.950 回答