【问题标题】:Sphinx setFilter() kills all resultsSphinx setFilter() 杀死所有结果
【发布时间】:2010-09-05 08:45:48
【问题描述】:

我为我的搜索引擎安装了 sphinx,它运行良好,但现在我尝试使用 setFilter() 向搜索添加一些额外的功能,这应该允许我执行 WHERE/AND 子句,但每当我尝试搜索,它应该返回没有结果。

这是我的工作代码:

 require_once ( "sphinxapi.php" );
 $cl = new SphinxClient ();
 $cl->SetConnectTimeout ( 5 );
 $cl->SetMatchMode ( SPH_MATCH_BOOLEAN );
 $cl->SetSortMode ( SPH_SORT_EXPR  , "@weight" );
 $cl->SetFieldWeights ( array ( "item_title"=>100, "item_tags"=>99 ) );
 $cl->SetLimits(0, 1000, 1000, 1000);
 $cl->SetRankingMode ( SPH_RANK_PROXIMITY_BM25 );
 $cl->AddQuery( $term, "indexTubelogr" );

现在我想使用 QUERY - AND item_site_id = 1 开始搜索。我补充:

$cl->SetFilter('item_site_id', 1);

然后我得到以下错误:

Warning: assert() [function.assert]: Assertion failed in /home/domain.com/sphinxapi.php on line 810

我也试过了:

$cl->SetFilter('item_site_id', array(1));

这没有给出错误,但同样没有结果。

我的 sphinx.conf 看起来像:

source srcDomain
{
        type                                    = mysql
        sql_sock                                = /tmp/mysql.sock
        sql_attr_timestamp                      = item_date
        sql_ranged_throttle                     = 0
        sql_query_info                          = SELECT * FROM items WHERE item_id=$id
        sql_query                               = \
                SELECT item_id, item_date, item_runtime, item_title, item_tags, item_site_id FROM items
}
index indexDomain
{
        source                  = srcDomain
        path                    = /opt/sphinx/var/data/domain
        docinfo                 = extern
        mlock                   = 0
        morphology              = stem_en
        min_word_len            = 2
        charset_type            = sbcs
        ignore_chars            = U+00AD
        phrase_boundary         = ., ?, !, U+2026 # horizontal ellipsis
        html_strip              = 0
        preopen                 = 1
}

谁能告诉我我做错了什么?

我从代码中删除了敏感数据。

【问题讨论】:

    标签: php mysql sphinx


    【解决方案1】:

    您能否尝试从命令行运行这些命令:

    search -i indexTubelogr myterm
    search -i indexTubelogr -f item_site_1 1 myterm
    

    然后比较输出?

    【讨论】:

    • 老实说,我不知道如何通过命令行运行 sphinx 命令。
    • @Godius:只需复制并粘贴命令(将 myterm 更改为您的实际搜索查询):)
    • 好的,我得到了命令行工作。使用配置文件'/opt/sphinx/etc/sphinx.conf'...索引'indexTubelogr':搜索错误:没有这样的过滤器属性'item_site_id' .
    • 那么如何添加过滤属性'item_site_id'?
    【解决方案2】:

    好的,我最终发现了问题。我忘记在 sphinx.conf 文件中设置 item_site_id 的属性了。

    然后用 $cl->SetFilter('item_site_id', array(1));我拉了结果。

    感谢您提供所有信息!

    【讨论】:

      猜你喜欢
      • 2012-01-07
      • 1970-01-01
      • 1970-01-01
      • 2013-08-19
      • 1970-01-01
      • 2010-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多