将连接标签搜索与RT sphinx中的其他参数相结合

时间:2014-02-21 16:19:12

标签: php mysql real-time sphinx

我们使用带有RealTime(RT)索引的sphinx来搜索我们的数据库。现在它包含经度,纬度,标题,内容等字段,一切正常。问题是我们想要实现一个关系Tag-table,我们不知道该怎么做。

在我们当前的配置中,我们利用了sphinxApi(for php)中提供的许多预配置方法,例如:

 $this->_sphinxClient->setMatchMode(SPH_MATCH_EXTENDED2);

$this->_sphinxClient->SetGeoAnchor('latitude', 'longitude', (float)$this->latitude, (float)$this->longitude);

$this->_sphinxClient->SetFilterRange('price', $this->_priceMin, $this->_priceMax);

// And getting the final result with the:
$result = $this->_sphinxClient->Query($this->searchString, 'rt');

如果可能,我们想要做的是使用mva(多值属性)或使用join语句第二次搜索结果,并逐出不包含任何标记的结果。

我们目前无法使用这些选项,所以如果有人有任何想法,我会在这里得到一些帮助。使用另一个带有id / tagname组合的索引或当前的一个字符串属性?在与第一个查询相同的查询中实现搜索,或使用tagjoin在第二个查询中搜索这些结果?

如果我错过了任何重要的信息,请告诉我,并提前感谢您!

1 个答案:

答案 0 :(得分:1)

将标记附加到当前索引。如果您只需要搜索它们,请在全文字段和字符串属性中插入标记,如果您想在结果中获取标记。如果您需要进行分组,您可以:

  • 使用MVA,但您需要在标记名称和标记ID之间建立映射
  • 使用JSON属性。您可以在类似于MVA的字符串数组上使用IN。对于更高级的东西,您可以使用ALL()或ANY()函数。

对于分组,请记住使用SetArrayResult(true)。我还建议切换到SphinxQL界面。