Ruby on Rails - > ThinkingSphinx - > SphinxSearch - > MySQL的
我想搜索titles表。预期的用户关键字不是完全匹配,它将是部分匹配。
search_key = "android samsung galaxy ace black phones"
搜索titles表,
标题(表)
1 |诺基亚c6
2 |三星银河王牌
3 |三星Galaxy ace y
4 |诺基亚lumia 800
5 |三星蒙特
6 |三星Galaxy note
案例 - 1:
Title.search search_key, :match_mode => :all
=>No results
评论:错误
案例-2:
Title.search search_key, :match_mode => :any
=>[samsung galaxy ace, samsung galaxy ace y, samsung monte, samsung galaxy note]
评论:好的,但不相关,用户只想要“samsung galaxy ace”,她明确指出了她的关键词。为什么要展示其他三星手机?
案例-3:
Title.search 'search_key/3',:match_mode => :extended
=> samsung galaxy ace
评论:Bingo!,但硬编码。
现在,我应该知道在titles表中有多少关键字可以完全匹配。 (例如,“三星银河王牌黑色手机”中的“三星银河王牌”3)
我该如何解决这个问题?狮身人面像处理这个?如果没有做什么?
答案 0 :(得分:1)
一种方法是将sphinx索引中的wordcount存储为属性。
sql_field_str2wordcount是一种很好的方法 http://sphinxsearch.com/docs/current.html#conf-sql-field-str2wordcount
然后,您可以将其用作过滤器的基础
$cl->setMatchMode(SPH_MATCH_EXTENDED);
$cl->setRankingMode(SPH_RANK_WORDCOUNT);
$cl->setSelect("*,IF(@weight=>titles,1,0) as myfilter");
$cl->setFilter("myfilter",array(1));
$cl->Query("\"$search_key\"/1",'Title');
(抱歉,不知道如何在思考sphinx中做到这一点。上面是PHP API语法)
修改,检查http://freelancing-god.github.com/ts/en/searching.html和http://freelancing-god.github.com/ts/en/common_issues.html#or_attributes
看起来可能像
with_display = "*, IF(@weight=>titles,1,0) AS display"
Title.search 'search_key/3',
:match_mode => :extended,
:rank_mode => :wordcount,
:sphinx_select => with_display,
:with => {'display' => 1}
答案 1 :(得分:0)
如果安装Sphinx 2.0.4-dev(rel20-r3193),则可以使用。
点击此链接,
http://sphinxsearch.com/forum/view.html?id=9387
<强>先生。巴里亨特,非常感谢你的支持。