我正在尝试编写一个狮身人面像查询,以列出以某个关键字开头的域。
假设我有一个包含以下项的sphinx索引。
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没有显示,因为我猜它不是完全匹配的?如何才能显示以'query‘开头的所有结果?即使它是一个单词的一部分。
发布于 2012-11-11 21:09:58
您应该启用星号选项(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-11 18:31:50
我发现在这种情况下不需要Sphinx。
对于在VARCHAR字段上运行这样的查询,仅MySQL就足够快了。
SELECT * FROM domain WHERE domain LIKE '$search_term%'运行速度非常快,即使在超过一百万条记录上也是如此。
https://stackoverflow.com/questions/13330141
复制相似问题