我想从 Sphinx 检索数据,但不使用查询关键字,但使用来自其他属性的过滤器。这些其他属性是整数。以下是我们索引的属性:
id - Integer
keyword - String
keyword_ord - Integer
words - Integer
results - Integer
我们的表中有大约 3 亿个关键字,我们尝试通过在 Sphinx 中使用空查询来解决这个问题(注意:我们使用的是 PHP 和 MySQL)。假设我们想要获取其中包含 3 到 6 个单词的关键字以及具有 3000 到 10000 个结果的关键字,那么我们使用 PHP 中 Sphinx API 的 SetFilterRange() 函数。
$sphinx->SetFilterRange( 'words', 3, 6 );
$sphinx->SetFilterRange( 'results', 3000, 10000 );
然后为了执行搜索,我们发送一个空查询。
$results = $sphinx->query( '' );
问题是查询似乎仍然比我们预期的要慢。您认为除了在 Sphinx 中发送空查询之外,还有更好的方法来使用过滤器获取数据吗?或者除了狮身人面像本身还有更好的解决方案吗?
不过在我的猜测中,我认为它之所以慢的原因是因为 Sphinx 实际上必须遍历所有 3 亿个关键字才能找到属于过滤器的所有内容。如果指定的查询中有关键字(而不是空查询),则在索引的帮助下,它不必遍历所有关键字,而是跳过不包含关键字的行。如果这是原因,那么除了使用 Sphinx 之外,必须有更好的方法来解决这个问题。
至于我们的服务器硬件规格:
- CPU:Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz(8 核)
- 内存:2GB
- 磁盘空间:250GB