php – 如何将搜索字词捆绑到更有效的查询中?

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 如何将搜索字词捆绑到更有效的查询中?脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要将搜索字词列表转换成最有效的组合搜索字词集.任何单词或引用的短语都可以由OR分隔.许多语可以在括号内组合.也可以使用ANDs.

例如,foo bar和boo吧共享栏,所以代替两个不同的搜索项,可以组合为(foo OR boo)AND bar.

这是算法需要做的.给定这个数据集:

foo bar
boo bar
goo bar
hoo doo
foo manchu
moo bar
too bar
foo fighters
"blue kazoo" bar
baz
qux
quux

我想得到以下回覆:

(foo OR boo OR goo OR moo OR too OR "blue kazoo") AND bar
foo AND (manchu OR fighters)
hoo doo
baz OR qux OR quux

这不行:

(foo bar) OR (boo bar) OR (goo bar) OR (foo manchu)

我将在PHP中工作,但是我会用代码来取得答案,PHP或者我将从主要语言转换.

@H_404_17@
@H_404_17@
我得到以下代码
function keyMultiSort(&$array,$key,$reverse = false,$PRiorITy_last = false,$save_key = true,Callable $func = null)
{
    if ($func === null)
    {
        $func = function ($First,$second) use ($key,$reverse,$priority_last)
        {
            if (!isset($first[$key]))
            {
                return ($reverse === false) ? -1 : 1;
            }
            if (!isset($second[$key]))
            {
                return ($reverse === false) ? 1 : -1;
            }

            if ($first[$key] > $second[$key])
            {
                return ($reverse === false) ? 1 : -1;
            }
            if ($first[$key] < $second[$key])
            {
                return ($reverse === false) ? -1 : 1;
            }
            if ($first[$key] === $second[$key])
            {
                return ($priority_last === false) ? 1 : -1;
            }

            return 0;
        };
    }

    if ($save_key)
    {
        uasort($array,$func);
    }
    else
    {
        usort($array,$func);
    }
}

$array = [
    ['foo','bar'],['boo',['goo',['hoo','doo'],['foo','manchu'],['moo',['too','fighters'],['blue kazoo',];

$pairs = [];
$str = '';
foreach($array as $item)
{
    if(!isset($pairs[$item[0]]['count']))
    {
        $pairs[$item[0]]['count'] = 1;
    }
    else
    {
        $pairs[$item[0]]['count']++;
    }
    $pairs[$item[0]]['elements'][] = $item[1];

    if(!isset($pairs[$item[1]]['count']))
    {
        $pairs[$item[1]]['count'] = 1;
    }
    else
    {
        $pairs[$item[1]]['count']++;
    }
    $pairs[$item[1]]['elements'][] = $item[0];
    keyMultiSort($pairs,'count',true);
}

$remove = [];
foreach($pairs as $elm=>$item)
{
    $remove[] = $elm;
    $elements = array_diff($item['elements'],$remove);
    if(empty($elements))
    {
        if (in_array($elm,$remove))
        {
            continue;
        }
        $str .= $elm.PHP_EOL;
    }
    else
    {
        $str .= $elm.' AND ('.implode(' OR ',$elements).')'.PHP_EOL;
    }
    $remove = array_merge($remove,$elements);
}
var_dump($str);

结果:

string(99) "bar AND (foo OR boo OR goo OR moo OR too OR blue kazoo)
foo AND (manchu OR fighters)
hoo AND (doo)
"

它可以优化,取决于目标…

@H_404_17@
本图文内容来网友网络收集整理提供,作为学习参考使用,版权属于原作者。

脚本宝典总结

以上是脚本宝典为你收集整理的php – 如何将搜索字词捆绑到更有效的查询中?全部内容,希望文章能够帮你解决php – 如何将搜索字词捆绑到更有效的查询中?所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。