sphinx搜索部分关键字匹配

时间:2012-04-24 13:11:59

标签: mysql full-text-search sphinx thinking-sphinx partial

Ruby on Rails - > ThinkingSphinx - > SphinxSearch - > MySQL的

我想搜索titles表。预期的用户关键字不是完全匹配,它将是部分匹配。

search_key = "android samsung galaxy ace black phones"

搜索titles表,

标题(表)

id |标题

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)

我该如何解决这个问题?狮身人面像处理这个?如果没有做什么?

2 个答案:

答案 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.htmlhttp://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

<强>先生。巴里亨特,非常感谢你的支持。