0

私がやろうとしていることを説明する例を次に示します。

Cookbook と Recipe の間に 1 対多の関係があり、両方のテーブルにフィールド 'id' と 'name' があるとします。現在、検索ではレシピの「名前」フィールドのみが返されるため、結果は次のようになります -

レシピ

  • 結果名 1
  • 結果名 2
  • 結果名 3
  • ...

外部キーに sql_attr_uint を使用して追加のデータベース呼び出しや検索クエリを実行せずに、私が見たいのは次のとおりです。

レシピ

  • 結果名 1 ---------- この結果のクックブック名
  • 結果名 2 ---------- この結果のクックブック名
  • 結果名 3 ---------- この結果のクックブック名
  • ...

私は sql_attr_string を知っていますが、これは各ドキュメントに単一の任意の文字列を追加する場合にのみ役立ちます。全文検索できない sql_joined_field のようなものが必要ですが、代わりに、クエリからの適切な値を使用してドキュメントに格納されるだけです。

任意の提案をいただければ幸いです。

4

2 に答える 2

1

Sphinxのドキュメントに少し混乱していたので、解決策に出くわしたと思います:

ドキュメント ID (最初の列) でも属性でもない列はすべて、フルテキスト インデックスが作成されます。

これは、何があっても、sql_query に配置したフィールドには全文索引が作成されることを意味すると解釈しました。実際、フィールドを「属性」として指定すると、この動作が変更され、実際にはフィールドのフルテキスト インデックスが削除され、代わりにドキュメントに配置されます。

私の問題を解決するために、メインの sql_query に JOIN を記述し (sql_joined_field では属性として指定できないように見えるため)、フィールドを sql_attr_string として設定しました。

于 2012-10-29T00:31:12.803 に答える
0

1 対多の文字列属性を処理するオプションは、いくつかの MySQL トリックを使用して、テキスト列をsql_query. 例えば;

SELECT DISTINCT *, GROUP_CONCAT(tm.text_field SEPARATOR ' ') FROM table t INNER JOIN table_many tm ON t.id = tm.t_id;

これは追加のサブクエリとしても機能し、より複雑な結合セットがある場合により便利です。

SELECT *, (SELECT GROUP_CONCAT(text_field SEPARATOR ' ') FROM table_many tm WHERE t.id = tm.t_id) FROM テーブル t

于 2012-10-29T00:56:55.903 に答える