1

Ruby on Rails -> ThinkingSphinx -> SphinxSearch -> Mysql

我想搜索标题表。预期的用户关键字不会完全匹配,而是部分匹配。

search_key = "android samsung galaxy ace black phones"

搜索titles表,

标题(表)

编号 | 标题

1 | 诺基亚c6
2 | 三星银河王牌
3 | 三星galaxy ace y
4 诺基亚 lumia 800
5 | 三星monte
6 | 三星银河笔记

情况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]

评论:好的,但不相关,用户只想要她在关键字中明确指定的“三星银河王牌”。为什么要显示其他三星手机?

案例-3:

Title.search 'search_key/3',:match_mode => :extended

=> samsung galaxy ace

评论:宾果游戏!,但硬编码。

问题:

现在,我应该知道有多少个关键字会在titles 表中得到完全匹配。(例如,“android samsung Galaxy ace 黑色手机”中的“samsung Galaxy ace”的 3)

我该如何解决这个问题?狮身人面像处理这个?如果不是怎么办?

4

2 回答 2

1

一种方法是将字数作为属性存储在 sphinx 索引中。

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');

(抱歉,在thinking-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}
于 2012-04-24T13:52:44.357 回答
0

找到答案

如果您安装 Sphinx 2.0.4-dev (rel20-r3193),这将有效。

按照这个链接,

http://sphinxsearch.com/forum/view.html?id=9387

Barry Hunter 先生,非常感谢您的支持。

于 2012-04-25T17:37:47.907 回答