1

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

タイトルテーブルを検索したい。予想されるユーザーキーワードは完全一致ではなく、部分一致になります。

search_key = "android samsung galaxy ace black phones"

タイトルテーブルを検索して、

タイトル(表)

id | タイトル

1 | ノキアc62
| サムスンギャラクシーエース
3| サムスンギャラクシーエースy4
| nokia lumia 800
5 | サムスンモンテ
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]

コメント:わかりましたが、関連性はありません。ユーザーは、キーワードで明示的に指定した「samsunggalaxyace」のみを望んでいました。なぜ他のサムスンの携帯電話を表示するのですか?

ケース-3:

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

=> samsung galaxy ace

コメント:ビンゴ!ですが、ハードコーディングされています。

質問:

ここで、タイトルテーブルで完全に一致するキーワードの数を知る必要があります。(たとえば、「android samsung galaxy aceblackphones」の「samsunggalaxyace」の3つ)

どうすればこれを回避できますか?Sphinxはこれを処理しますか?そうでない場合はどうすればよいですか?

4

2 に答える 2

1

1つの方法は、単語数を属性としてスフィンクスインデックスに格納することです。

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}
于 2012-04-24T13:52:44.357 に答える
0

回答が見つかりました

これは、Sphinx 2.0.4-dev(rel20-r3193)をインストールした場合に機能します。

このリンクをたどって、

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

バリーハンターさん、ご支援ありがとうございました。

于 2012-04-25T17:37:47.907 に答える