狮身人面像搜索部分关键字匹配 [英] sphinx search for partial keyword matches
问题描述
Ruby on Rails - > ThinkingSphinx - > SphinxSearch - > Mysql
我想搜索titles表。预期的用户关键字不会完全匹配,这将是部分匹配。
search_key =android samsung galaxy ace black手机
根据标题表搜索
titles(table)
id | title
1 |诺基亚c6
2 |三星galaxy ace
3 | samsung galaxy ace y
4 |诺基亚Lumia 800
5 |三星蒙特 -
6 |三星Galaxy Note
case - 1:
> Title.search search_key,:match_mode => :全部
=>无结果
评论:坏 情况-2: 评论:好,但并不相关,用户只需要明确指定关键字中的samsung galaxy ace。为什么要显示其他三星手机? p $ p> 评论:Bingo !,但硬编码。 > b 现在,我应该知道有多少个关键字会在标题表。 (例如,在android三星银河王牌黑手机中的三星银河王牌3) 我该如何解决这个问题?。狮身人面像处理这个?如果不是该做什么? 一种方法是将sphinx索引中的wordcount作为属性存储。 sql_field_str2wordcount是一个很好的方法来做到这一点 然后,您可以将其用作过滤器的基础。 (对不起,不知道如何在思维上做到这一点-sphinx particully。以上是PHP API语法) 编辑,检查 http://freelancing-god.github.com/ts/en/searching.html 和 http://freelancing-god.github.com/ts/en/common_issues.html#or_attributes 看起来可能类似于 Ruby on Rails -> ThinkingSphinx -> SphinxSearch -> Mysql I want to search the titles table. The expected user keyword will not be an exact match, it will be a partial match. Searching against the titles table, titles(table) 1 | nokia c6 case - 1 : Comment: Bad case -2 : Comment: OK, but not relevant, the user wanted only "samsung galaxy ace" which she specified in her keywords explicitly. Why show other samsung mobiles ? case -3 : Comment: Bingo!, but hard coded. Now, I should know how many number of keywords will get an exact match in the titles table. (For example, its 3 for "samsung galaxy ace" in "android samsung galaxy ace black phones") How do I go around this?. Sphinx handles this?. If not what to do ? One way is to store a wordcount in the sphinx index as attribute. sql_field_str2wordcount is a good way to do this
http://sphinxsearch.com/docs/current.html#conf-sql-field-str2wordcount You can then use it as a basis of a filter (Sorry, dont know how to do this in thinking-sphinx particully. The above is the PHP API syntax) Edit, checking http://freelancing-god.github.com/ts/en/searching.html and http://freelancing-god.github.com/ts/en/common_issues.html#or_attributes looks like might be something like
这篇关于狮身人面像搜索部分关键字匹配的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
Title.search search_key,:match_mode => :任何
=> [$ s
$ / pre
$
$ b
$ b Title.search'search_key / 3',:match_mode => :延长
=> samsung galaxy ace
问题:
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->查询(\$ search_key \/ 1,标题);
with_display =*,IF(@ weight => ;标题,1,0)AS显示
Title.search'search_key / 3',
:match_mode => :extended,
:rank_mode => :wordcount,
:sphinx_select => with_display,
:with => {'display'=> 1}
search_key = "android samsung galaxy ace black phones"
id | titles
2 | samsung galaxy ace
3 | samsung galaxy ace y
4 | nokia lumia 800
5 | samsung monte
6 | samsung galaxy note Title.search search_key, :match_mode => :all
=>No results
Title.search search_key, :match_mode => :any
=>[samsung galaxy ace, samsung galaxy ace y, samsung monte, samsung galaxy note]
Title.search 'search_key/3',:match_mode => :extended
=> samsung galaxy ace
Question:
$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');
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}