Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.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 显示多个单词的搜索结果_Php_Mysql_Html_Search_Highlight - Fatal编程技术网

Php 显示多个单词的搜索结果

Php 显示多个单词的搜索结果,php,mysql,html,search,highlight,Php,Mysql,Html,Search,Highlight,在我的搜索表单中,如果用户键入“good”,它将显示包含关键字“good”的所有结果。但是,如果用户键入“good sweetest”,则不会显示任何结果,因为没有两个单词同时出现的记录;但是出现在不同地方的条目中 例如,记录上说: 一个好的行动是永恒的 储存和纯收益 用户输入'good',它将显示此记录,但如果用户输入'good'+'pure',它将不显示任何内容。或者,如果记录包含关键字“good diges”,并且如果用户键入的“good diges”没有连字符,则不会显示任何内容 我想要

在我的搜索表单中,如果用户键入“good”,它将显示包含关键字“good”的所有结果。但是,如果用户键入“good sweetest”,则不会显示任何结果,因为没有两个单词同时出现的记录;但是出现在不同地方的条目中

例如,记录上说:

一个好的行动是永恒的 储存和纯收益

用户输入'good',它将显示此记录,但如果用户输入'good'+'pure',它将不显示任何内容。或者,如果记录包含关键字“good diges”,并且如果用户键入的“good diges”没有连字符,则不会显示任何内容

我想要的是,如果用户键入“good”+“pure”或“good deactives”,它应该记录包含这些关键字的突出显示

search.php代码:

$search_result = "";

$search_result = $_POST["q"];

$search_result = trim($search_result);

//Check if the string is empty
if ($search_result == "") {
  echo  "<p class='error'>Search Error. Please Enter Your Search Query.</p>" ;
  exit();
      }

if ($search_result == "%" || $search_result == "_" || $search_result == "+" ) {
  echo  "<p class='error1'>Search Error. Please Enter a Valid Search Query.</p>" ;
  exit();
      }

$result = mysql_query('SELECT cQuotes, vAuthor, cArabic, vReference FROM thquotes WHERE cQuotes LIKE "%' . mysql_real_escape_string($search_result) .'%" ORDER BY idQuotes DESC', $conn)
  or die ('Error: '.mysql_error());


function h($s) {
    echo htmlspecialchars($s, ENT_QUOTES);
} 

function highlightWords($string, $word)
 {

    $string = preg_replace("/".preg_quote($word, "/")."/i", "<span class='highlight'>$0</span>", $string);
    /*** return the highlighted string ***/
    return $string;

 }

?>

<div class="caption">Search Results</div>
<div class="center_div">
<table>
    <?php while ($row= mysql_fetch_array($result, MYSQL_ASSOC)) {
        $cQuote =  highlightWords(htmlspecialchars($row['cQuotes']), $search_result);
        ?>
        <tr>
        <td style="text-align:right; font-size:18px;"><?php h($row['cArabic']); ?></td>
            <td style="font-size:16px;"><?php echo $cQuote; ?></td>
            <td style="font-size:12px;"><?php h($row['vAuthor']); ?></td>
            <td style="font-size:12px; font-style:italic; text-align:right;"><?php h($row['vReference']); ?></td>
        </tr>
    <?php } ?>
</table>
</div>
search.html:

   <form name="myform" class="wrapper">
      <input type="text" name="q" onkeyup="showUser()" class="txt_search"/>
      <input type="button" name="button" onclick="showUser()" class="button"/>
      <p>
        <div id="txtHint"></div>
    </form>

你想要的东西叫做。简单地说,全文搜索基本上是单独搜索每个单词。

当您搜索、查询索引并返回相关内容时,您需要实现内容索引以利用这种搜索,本质上是一个将每个单词与内容组件(如您的记录)相关联的关系表,此外,这还允许您按计数更改相关性,添加要编制索引的字段等。这可能是一个良好的开端。

在我看来,为您的站点正确使用搜索引擎是最困难的事情之一。我会在谷歌上注册我的网站,让谷歌为其编制索引。您可以自定义页面的输出,并将其集成到站点中


唯一的证据将是谷歌品牌的搜索按钮,但老实说,我想你现在可以删除它。

我的表类型是INNODB。不幸的是,它说它不支持全文。在这种情况下,我建议你去看看,这正是如何解决这个问题。如果你无法像那篇文章中建议的那样使用专用搜索引擎,你可以做其他事情,比如使用触发器将InnoDB数据复制到MyISAM表并在该表上搜索,或者像Gabriel建议的那样通过手动拆分内容并将单词链接到正确的帖子来滚动你自己的解决方案。谢谢你的回答。已经决定采用php替代方案。请看我的上述评论。我的表类型是INNODB。在INNODB中使用全文是否有解决办法?据我所见,似乎大多数用户都在创建一个辅助ISAM表来处理这个问题,我只能假设通过读取INNODB中的内容并在ISAM中创建索引记录来执行搜索,而不是返回结果,而是通过键对INNODB进行查询。