Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.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_Search_Full Text Search_Sphinx - Fatal编程技术网

将Sphinx与具有多个索引的PHP一起使用

将Sphinx与具有多个索引的PHP一起使用,php,search,full-text-search,sphinx,Php,Search,Full Text Search,Sphinx,我问了一些类似的问题,但可能没有提供所需的全部信息 我已经安装了Sphinx的最新版本,并创建了索引(虽然我不是100%,但我已经优化了此配置)(此配置请参见底部的pastebin链接) 下面是用字符串'teaching'连接Sphinx API的脚本,我想对其执行搜索-目前我有四个索引(请参阅此处的配置-),我需要能够确定每个结果来自哪个索引,因为这将确定我需要对哪个表执行查询 例如 有了它返回的ID数组,任何人都可以建议最好的方法:- 确定结果来自哪个索引以确定查询 还有..如果我用“正确

我问了一些类似的问题,但可能没有提供所需的全部信息

我已经安装了Sphinx的最新版本,并创建了索引(虽然我不是100%,但我已经优化了此配置)(此配置请参见底部的pastebin链接)

下面是用字符串'teaching'连接Sphinx API的脚本,我想对其执行搜索-目前我有四个索引(请参阅此处的配置-),我需要能够确定每个结果来自哪个索引,因为这将确定我需要对哪个表执行查询

例如

有了它返回的ID数组,任何人都可以建议最好的方法:-

  • 确定结果来自哪个索引以确定查询

  • 还有..如果我用“正确的方式”做这件事-有点像Spinx的noob:)

    
    
http://pastebin.com/DGgheqYm

更新:这里仍然有问题的是Sphinx API的输出-我无法理解为什么我使用Barry的帖子中的帮助添加的属性似乎没有出现

每个索引设置一个“常量”属性

source articles
...
sql_query = SELECT ID, 1 AS table_id, Title, Description FROM articles
sql_attr_uint = table_id
...

source publications
...
sql_query = SELECT Title_ID, 2 AS table_id, Title, PageTitle, PageContent, Description FROM publications
sql_attr_uint = table_id
...

//etc
然后


sql_查询是否应该完全如您所示,例如。。。选择ID,1作为表,标题,我在文章中的描述作为你的帖子,当我运行indexer时--我得到的所有错误如下:
error:index articles:sql\u query:你的语法有错误…..使用near'Table,Title,文章中的描述
文章中没有名为Table的列-非常感谢您提供的任何帮助:)啊,当然Table,是mysql中的保留字!属性的名称并不重要,它只需要在每个索引中使用相同的名称,编辑答案以更改为使用table_id。因为Barry非常棒,所以+1被提升。在撕下我的大部分头发后,我在他的网站上偶然发现了一个PHP脚本,它在两天前救了我的饭碗!离题,是的,我知道^ ^巴里非常棒!
<?php
include('api/sphinxapi.php');
$cl = new SphinxClient();
$cl->SetServer( "localhost", 9312 );
$cl->SetMatchMode( SPH_MATCH_ANY  );
$result = $cl->Query( "teaching" );

if ( $result === false ) {
echo "Query failed: " . $cl->GetLastError() . ".\n";
}
else {
if ( $cl->GetLastWarning() ) {
  echo "WARNING: " . $cl->GetLastWarning() . "
";
}

if ( ! empty($result["matches"]) ) {
  foreach ( $result["matches"] as $doc => $docinfo ) {
        echo "$doc\n";
  }

  print_r( $result );
 }
 }

 exit;
 ?>
source articles
...
sql_query = SELECT ID, 1 AS table_id, Title, Description FROM articles
sql_attr_uint = table_id
...

source publications
...
sql_query = SELECT Title_ID, 2 AS table_id, Title, PageTitle, PageContent, Description FROM publications
sql_attr_uint = table_id
...

//etc
foreach ( $result["matches"] as $doc => $docinfo ) {
    switch($docinfo['attrs']['table_id']) {
        case 1: echo "Article:$doc\n"; break;
        case 2: echo "Publication:$doc\n"; break;
        case 3: echo "Library Content:$doc\n"; break;
        //etc
    }
}