0

我试图编写一个狮身人面像查询来列出以某个关键字开头的域。

假设我有一个包含以下项目的狮身人面像索引。

stack.com
stack-it.com
stack.net
stack-studio.com
stackoverflow.com
stackmonkey.com

以下查询

$cl->SetMatchMode ( SPH_MATCH_EXTENDED2 );
$cl->SetFieldWeights ( array ( "site_domain"=>100 ) );
$cl->SetSortMode ( SPH_SORT_EXTENDED  , "@weight DESC" );
$cl->SetLimits(0, 100);
$cl->AddQuery( '^stack', "domainsDb" );

只会列出:

stack.com
stack-it.com
stack.net
stack-studio.com

因为它找到以 . 或者 -。但是stackoverflow.com没有显示,因为我猜它不是一个完整的匹配?如何获得以“查询”开头的所有结果来显示?即使它是一个词的一部分。

4

2 回答 2

2

您应该启用星号选项(http://sphinxsearch.com/docs/1.10/conf-enable-star.html)并在您要查找的关键字后添加 *:

$cl->AddQuery('^stack*, "domainsDb" );

也不要忘记设置最小中缀长度(http://sphinxsearch.com/docs/1.10/conf-min-infix-len.html)

使用 MySQL 进行全文搜索并不是一个真正值得推荐的想法。

1) 与 sphinx/solr 相比,使用 FT 索引的全文搜索速度较慢

2) 没有 FT 索引的全文搜索非常慢,可以非常快速地利用 100% 的数据库服务器,即使在非常低的流量下也无法使用

3)为了能够拥有 FT 索引,您必须使用 MyISAM 引擎,而不是 Innodb,另一方面,Innodb 可能有其自身的一些缺点

于 2012-11-11T13:09:58.080 回答
0

我发现在这种情况下不需要 Sphinx。

仅 MySQL 就可以在 VARCHAR 字段上运行此类查询非常快。

SELECT * FROM domain WHERE domain LIKE '$search_term%'

运行速度超快,甚至超过一百万条记录。

于 2012-11-11T10:31:50.303 回答