Sphinx查询列出内部单词的结果

时间:2012-11-11 10:03:51

标签: sphinx

我正在尝试编写一个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'开头的所有结果?即使它是一个单词的一部分。

2 个答案:

答案 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%'

运行速度超快,即使是百万+记录。