我需要简单的关键字搜索。
我的对象具有关联的关键字集。我需要可靠地搜索这些关键字。
搜索一些关键字后,搜索库应返回与这些关键字关联的对象的ID。另外我需要知道是否存在完全匹配(所有搜索的关键字都以单个集合[与对象相关联]呈现)。
我想避免使用多个OR运算符构建查询。
你能指点我一些图书馆或教程如何实现这个目标吗?
答案 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)