Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sphinx和PHP的一些问题_Php_Mysql_Sphinx - Fatal编程技术网

Sphinx和PHP的一些问题

Sphinx和PHP的一些问题,php,mysql,sphinx,Php,Mysql,Sphinx,情况如下: 我的数据库中有一个很大的表——3.6GB和1700行。从表中选择“限制”和“偏移”非常缓慢,通常会导致错误504。表是MyISAM,有多个索引,将被更新 这就是为什么我决定使用Sphinx来列出表的内容——在某些情况下没有查询(所有行),在某些情况下有查询——它的工作就像一个符咒。速度惊人 但问题是,如果没有查询,只返回前1000个结果。即使我用$this->SetLimits(41,24)调用它应该返回id为从984到1008的结果,但我得到的最后一个结果是id 1000。我尝试更

情况如下:

我的数据库中有一个很大的表——3.6GB和1700行。从表中选择“限制”和“偏移”非常缓慢,通常会导致错误504。表是MyISAM,有多个索引,将被更新

这就是为什么我决定使用Sphinx来列出表的内容——在某些情况下没有查询(所有行),在某些情况下有查询——它的工作就像一个符咒。速度惊人

但问题是,如果没有查询,只返回前1000个结果。即使我用
$this->SetLimits(41,24)调用它
应该返回id为从
984
1008
的结果,但我得到的最后一个结果是id 1000。我尝试更改我的
/etc/sphinxsearch/sphinx.conf
中的值,重新启动了服务,但没有成功。 还有,这是个好主意吗?我的意思是,它会显著降低性能吗?有什么建议吗

还有一个问题:

在我的
sphinx.conf
中,我选择了要用于搜索/排序的列,它们都出现在
[matches]
部分。由于我不使用它们,它们只占用内存,并且(我猜)在一定程度上降低了性能。我只在我的应用程序中使用
id
。是否可以按这些列进行搜索/排序,但将其从
[匹配项]
中排除

我的
sphinx.conf

source test {

  type          = mysql

  sql_host      = localhost
  sql_user      = root
  sql_pass      = password
  sql_db        = database
  sql_port      = 3306

  sql_query     = \
  SELECT id, name,  UNIX_TIMESTAMP(date) as date, views, rating \
  FROM table \
  WHERE active = 1

  sql_field_string      = name
  sql_attr_timestamp    = date
  sql_attr_uint         = views
  sql_attr_uint         = rating

  sql_query_info        = SELECT * FROM table WHERE id=$id

}

index test {

  source            = test
  path              = /var/lib/sphinxsearch/data/test
  docinfo           = extern
  charset_type      = utf-8

}

searchd {

  listen            = 9312
  log               = /var/log/sphinxsearch/searchd.log
  query_log         = /var/log/sphinxsearch/query.log
  read_timeout      = 5
  max_children      = 30
  pid_file          = /var/run/sphinxsearch/searchd.pid
  max_matches       = 10000 # I tried changing this to 10,000 - no result
  seamless_rotate   = 1
  preopen_indexes   = 1
  unlink_old        = 1
  binlog_path       = /var/lib/sphinxsearch/data

}

这是因为还有“每查询最大匹配数”设置,默认值为1000

在sphinx.conf中,可以设置如下内容

max_matches = 10000 
或者,将最大匹配项添加到查询中

$this->SetLimits(41, 24, 10000);
请注意,有两个地方强制执行最大匹配限制。 每个查询的限制由该API调用控制,但也存在 由max_控制的每服务器限制与配置文件中的设置相匹配。 为了防止RAM使用滥用,服务器将不允许设置每个查询 限制高于每服务器限制


关于第二部分,请查看
->SetSelect()
函数

如您所见,我在我的
searchd
部分中有
max_matches
,它被设置为10000OK,我尝试了这个,现在得到了10000个结果,但是如果我将第三个参数设置为10001,则不会返回任何结果
max_matches
现在设置为100000。有没有办法走得更高?那么,它工作正常吗?这里有更多信息:。感谢您的合作。是的,效果很好!你知道如何继续我问题的第二部分吗?