0

Sphinx 2.0.6 を使用して、ドキュメント ID に基づいて特定の順序を sphinx に返す方法はありますか?

たとえば、ID が 1 ~ 1000 のドキュメントが 1000 個あるとします。でもID999、1000、4、5、2…の順番で返したい。

この使用例:ポジショニングは動的であり、Sphinx を介して行う必要があります。ポジショニング値は、オンザフライで変更できる属性である必要があります。これもページ化されているため、単純に ID セットを収集して SQL を要求することはできません。Sphinx 自体は、指定した特定の順序を返す必要があります。

$cl->setSelect("*,FIND_IN_SET(id,".implode($id_array).") AS id_position");
$cl->SetSortMode(SPH_SORT_EXTENDED, 'id_position DESC');

$cl->setSelect("*,FIELD(id,".implode($id_array).") AS id_position");
$cl->SetSortMode(SPH_SORT_EXTENDED, 'id_position DESC');

残念ながら、Sphinx は FIELD() と FIELD_IN_SET() をサポートしていないようです。

このタスクを完了する方法はありますか? 私は今途方に暮れており、助けを借りることができます!

4

2 に答える 2

0

その配列構造を使用する必要がありますか? Sphinx では、「ORDER BY id」ステートメントを使用して、結果を取得するときに次を使用できます。

$cl->SetSortMode( SPH_SORT_ATTR_DESC, "id" );

于 2013-01-09T17:52:49.977 に答える
0

おかげさまで解決しました!これは、動的 ID 配列で注文できる優れたソリューションです。(実世界での使用... ユーザーのお気に入り、おすすめの製品、ユーザーが最も訪問したもの)

スフィンクス PHP コード:

$cl->SetOverride("id_position", SPH_ATTR_INTEGER, user_id_position());
$cl->SetSortMode(SPH_SORT_EXTENDED, "id_position ASC");

連想配列を作成する PHP 関数:

function user_id_position() {
        $id = $_original_id_list // This variable is the original id list that is in the correct order
        $max = count($id);
        $set = array();
        for ($i=0;$i < $max;$i++)
            $set[$id[$i]] = $i; // turns the array into array(document_id1 => position, document_id2 => position, ...)
        return $set;
}

sphinx.conf

source index_name
{
    sql_query                       = \
            SELECT \
                    *, 0 as id_position \
            FROM \
                    database_table;
    sql_attr_uint         = id_position
}

sphinx.conf に情報を追加した後、 --rotate する必要があります。

于 2013-01-09T22:19:11.330 に答える