2013-04-25 2 views
0

Мне нужен простой поиск по ключевым словам.Простой поиск ключевого слова с полным совпадением

У меня есть объекты, у которых есть связанный набор ключевых слов. Мне нужен способ надежного поиска этих ключевых слов.

После поиска некоторого набора ключевых слов поиск библиотеки должен возвращать идентификаторы объектов, связанных с этими ключевыми словами. Дополнительно мне нужно знать, есть ли полное соответствие (все искомые ключевые слова представлены в одном наборе [связанных с объектом]).

Я хочу избежать запроса на строительство с несколькими операторами OR.

Можете ли вы указать мне какую-нибудь библиотеку или учебник, как я могу это достичь?

+1

Таблица Mysql типа myisam, полные текстовые индексы на ваших полях и использование MATCH() – Dave

ответ

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. 
} 

Теперь предположим, это БД, связанные с folowing таблицы:

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) 
Смежные вопросы