我正在尝试编写一个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
因为它发现结果以a结尾。要么 -。但是stackoverflow.com
没有显示,因为它不是完全匹配我猜?如何才能获得以'query'开头的所有结果?即使它是一个单词的一部分。
答案 0 :(得分:2)
你应该选择enanble star选项(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,另一方面它可能有自己的一些缺点
答案 1 :(得分:0)
我发现在这种情况下不需要狮身人面像。
单独使用MySQL可以快速在VARCHAR字段上运行此类查询。
SELECT * FROM domain WHERE domain LIKE '$search_term%'
运行速度超快,即使是百万+记录。