2013-04-25 83 views
0

我需要简单的关键字搜索。完全匹配的简单关键字搜索

我有与他们关联的关键字集的对象。我需要通过可靠的方式搜索这些关键字。

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

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

你能指点我一些图书馆或教程我怎么能做到这一点?

+1

myisam类型的Mysql表,您的字段上的全文索引并使用MATCH() – Dave 2013-04-25 12:14:33

回答

2

因为我只看到一个php标签,我认为没有涉及数据库。但它是您声明的对象列表。

我不太清楚在没有数据库时建立查询的意思,但问题有点不清楚。

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

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)