Php 全文搜索
我有一个InnoDB表,从中检索值并将其存储在PHP中的数组中 现在,我想根据与搜索字符串中匹配项的相关性对数组进行排序 例如:如果我搜索“hai how are you”,它会将字符串拆分为单独的单词“hai”“how”“are”“you”,搜索后的结果必须如下所示:Php 全文搜索,php,string,full-text-search,sorting,Php,String,Full Text Search,Sorting,我有一个InnoDB表,从中检索值并将其存储在PHP中的数组中 现在,我想根据与搜索字符串中匹配项的相关性对数组进行排序 例如:如果我搜索“hai how are you”,它会将字符串拆分为单独的单词“hai”“how”“are”“you”,搜索后的结果必须如下所示: [0] hai how are all people there [1] how are things going [2] are you coming [3] how is sam 是否有任何方法可以仅在基
[0] hai how are all people there
[1] how are things going
[2] are you coming
[3] how is sam
是否有任何方法可以仅在基本PHP函数中按相关性对数组进行排序?$searchText=“hai你好”//如果单词之间有多个空格
$searchText = "hai how are you"; //eg: if there are multiple spaces between words
$searchText = preg_replace("(\s+)", " ", $searchText );
$searchArray =& split( " ", $searchText );
$text = array(0 => 'hai how are all people there',
1 => 'how are things going ',
2 => 'are you coming',
3 => 'how is sam',
4 => 'testing ggg');
foreach($text as $key=>$elt){
foreach($searchArray as $searchelt){
if(strpos($elt,$searchelt)!== FALSE){
$matches[] = $key; //just storing key to avoid memory wastage
break;
}
}
}
//print the matched string with help of stored keys
echo '<pre>matched string are as follows: ';
foreach ($matches as $key){
echo "<br>{$text[$key]}";
}
$searchText=preg_replace(“(\s+”,”,$searchText);
$searchArray=&split(“,$searchText”);
$text=array(0=>“那里的人都好吗”,
1=>“情况如何”,
2=>“你要来吗”,
3=>“山姆怎么样了”,
4=>“测试ggg”);
foreach($key=>$elt形式的文本){
foreach($searchArray作为$searchelt){
if(strpos($elt,$searchelt)!==FALSE){
$matches[]=$key;//仅存储密钥以避免内存浪费
打破
}
}
}
//使用存储的密钥打印匹配的字符串
echo'匹配字符串如下:';
foreach($匹配为$key){
回显“
{$text[$key]}”;
}
可能是这样的:
查看php手册,了解相似文本和usort的功能。您可以查看
相似文本()
您的$query变量无法在compare()中直接访问。你需要这样做。函数compare($arrayMember1,$arrayMember2){global$query;}当我刚刚比较str1=“testing ggg”,str2=“hai how are you”similous_text()=>返回2和相似度百分比:15.384615384615我写了“可能是这样的”,这意味着我只给出了一些想法。当然,除非他/她付钱给我,否则不要期望我完全完成这项工作。关于类似的文本函数,我确信比较“how”和“hai how…”会得到比测试更大的值。不要为更好的解决方案而竞争:)事实上,我会推荐你的方法,因为我的方法效率要低得多。但他/她想要一个具有现有php功能的解决方案
$arrayToSort=array(); //define your array here
$query="hai how are you";
function compare($arrayMember1,$arrayMember2){
$a=similar_text($arrayMember1,$query);
$b=similar_text($arrayMember2,$query);
if($a>$b)return 1;
else return -1;
}
usort($arrayToSort,"compare");