Mysql文本搜索问题

时间:2011-10-04 05:14:34

标签: php mysql search

我正在尝试进行精确搜索,但在使用“Sonal”进行搜索时遇到问题,我从记录中得到的结果是“Sonal”& “个人”。当我删除var之前的%,然后获取结果哪个记录从“Sonal”开始,并且没有发现该文本在任何地方都有“Sonal”。

以下是查询:

AND (
       lower(document_text) LIKE '%".$search_name2."%' 
    OR lower(customdoc_name) LIKE '%".$search_name2."%' 
    OR lower(doc_tags) LIKE '%".$search_name2."%'
)

记录。 1 - 个人证书
建议2 - Sonal证书。

我想在搜索“Sonal”时只返回第二条记录。

我没有使用FULLTEXT字段。

3 个答案:

答案 0 :(得分:2)

这可能有所帮助,

添加字符串后面的空格或仅前后和后面。通过这个,你会得到“sonal”的结果,如果是字符串的开头或字符串的中间或字符串的结尾。

AND (
       lower(document_text) LIKE '%".$search_name2." %' 
    OR lower(customdoc_name) LIKE '% ".$search_name2." %' 
    OR lower(doc_tags) LIKE ' %".$search_name2."%'
)

答案 1 :(得分:1)

使用REGEXP尝试关注..

AND (
       lower(document_text) REGEXP '[[:<:]]".$search_name2."[[:>:]]' 
    OR lower(customdoc_name) REGEXP '[[:<:]]".$search_name2."[[:>:]]' 
    OR lower(doc_tags) REGEXP '[[:<:]]".$search_name2."[[:>:]]' 
)

表现明智不好..但你会得到确切的结果..

答案 2 :(得分:0)

“%”运算符仅以这种方式运行。

这是一个通配符,意思是任何字符串。 所以

  1. “%HELL%”将匹配“OT * HELL * O”,“HELL”,“HELLO”,“THE_ HELL ”等
  2. “HELL%”只会匹配以HELL开头的单词,如“HELL”,“HELLO”,“HELLOWW”,而不是“OTHELLO”。
  3. “%HELL”将匹配以HELL结尾的单词,如“THE_HELL”,但不是“HELLO”。