Sphinx 0.9.9已配置为与MySql一起使用。
我最近注意到,狮身人面像不适用于包含字符多次出现的搜索词。

有效的PHP代码:

// Initialize SphinxClient class object
$cl = new SphinxClient ();
// Set the server and port
$cl->SetServer ( "127.0.0.1", 9313 );

// Initialize prefixed query
$query_prefix = '';
// Set the limit
$cl->SetLimits((int)$offset, (int)$count);
// Set the match mode
$cl->setMatchMode(SPH_MATCH_EXTENDED);
// Set the ranking mode
$cl->setRankingMode(SPH_RANK_WORDCOUNT);
// Set sorting
$cl->SetSortMode(SPH_SORT_EXTENDED,'@relevance DESC, updated_date DESC' );

$query_main = '@(name,description)';

// Initialize the search index
$search_index = 'index_common';

$search_text = $cl->EscapeString($search_text);

// Run the search query
$resp = $cl->Query($query_prefix . '('. $query_main . '"^' . $search_text . '$" | "' .
    $search_text . '" | (' . $search_text . ') | "'
    . $search_text . '"/1 | (' . $search_text_wild . ')) ' ,$search_index);


如果输入不带引号的搜索词,例如“ >>”,则会生成以下查询:

(@(name,description)"^>>$" | ">>" | (>>) | ">>"/1 | (*>>*))


并且不会像在系统中找不到搜索词时那样给出任何响应。这是由于的多次出现而不是单个发生。

这是Sphinx的已知问题,还是有办法解决(使Sphinx在这类特殊情况下正常工作)?

最佳答案

<>语法。

因此,这可能会导致问题。您可以尝试将它们转义,我想EscapeString不会这样做。

但是请记住,除非出现在字符集表中,否则它们将永远无法匹配。

(另外,当您说没有响应时,请务必检查$cl->getLastError()

关于php - 在Sphinx 0.9.9中搜索多个<或>失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13801220/

10-12 17:20
查看更多