2013-04-25 85 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)