完全匹配的简单关键字搜索

时间:2013-04-25 12:13:29

标签: php

我需要简单的关键字搜索。

我的对象具有关联的关键字集。我需要可靠地搜索这些关键字。

搜索一些关键字后,搜索库应返回与这些关键字关联的对象的ID。另外我需要知道是否存在完全匹配(所有搜索的关键字都以单个集合[与对象相关联]呈现)。

我想避免使用多个OR运算符构建查询。

你能指点我一些图书馆或教程如何实现这个目标吗?

1 个答案:

答案 0 :(得分:2)

因为我只看到一个php标签,我认为没有涉及到DB。但是你说的是一个对象列表。

我不太清楚你在没有数据库的情况下构建查询是什么意思,但问题有点不清楚。

我认为这是你所谈论的对象的类:

class SomeObject
{

    private $id;
    private $keywords = array();

    public function getId()
    {
        return $this->id;
    }
  public function getKeywords()
    {
        return $this->keywords;
    }

}

然后这将是解决方案:

function filterObjectArray($objectArray, $search)
{
    $resultIds = array();
    $resultObjects = array();
    foreach ($objectArray as $object)
    {
        foreach ($object->getKeywords() as $keyword)
        {
            if ($search == $keyword)
            {
                $resultIds[] = $object->getId();
                $resultObjects[] = $object;
                break;
            }
        }
    }

    return $resultObjects;
    // or you could do return $resultIds; But i think returning the objects is a nicer solution.
}

现在让我们假设它与下表有DB:

someobject
 \ id
 \ name 
 \ etc

keywords
 \ id
 \ keyword
 \ someobjectid

然后就是:

    select 
id 
from someobject o 
where 
exists (select 1 from keywords k where k.keyword = 'thekeywordiamlookingfor' and k.objectid = someobject.id)