1

本番データベースには 256 個のテーブルがあります。SELECT各テーブルには約 10,000,000 行あります。1 つのクエリで 1 つのテーブルからすべての行を取得することはできません。

実際、テストとして、このようにクエリフェーズを solr/conf/data-config.xml に入れました。1 つのテーブルがあり、すべての行を選択しています。

Solr (Java ベース) を使用しています。そして、次のようにデータのインデックス作成をトリガーします。

curl --max-time 36000 -i localhost:portNum/solr/dataimport?command=full-import

これは XML の内容です。

<entity name="file" query="SELECT *, LOWER(REPLACE(sw_name, ' ', '')) packed_sw_name, CAST(group_id as char) group_id_s FROM tblTmp1"/>

しかし今、データ インポート用のテーブル番号 (tblNum) のパラメーターを取得し、ID 範囲内の行を繰り返し選択したいと考えています。ドル記号変数置換を使用すると、クエリは次のようになります。

<entity name="file" query="SELECT *, LOWER(REPLACE(sw_name, ' ', '')) packed_sw_name, CAST(group_id as char) group_id_s FROM tblTmp1_$tblNum where id >=$startSn and id<$endSn" />

データベースに繰り返しクエリを実行するにはどうすればよいですか? また、どのファイルでこれを設定すればよいですか?

4

1 に答える 1

0

そのようなロジックを追加したい場合、これが SQL クエリを記述するのに最適な場所であるかどうかはわかりません。

インポーターを構成どおりに使用する場合は、カーソルを使用して選択をループで実行し、結果を Solr の一時テーブルに入れます。それが MySQL 構文でどのように機能するかはわかりませんが、思い出すと、他の SQL ダイアレクトに似ています (ただし、同一ではありません)。PostgreSQL の PL/PgSQL 言語でのカーソル クエリの例を次に示します。

CREATE FUNCTION urge_to_merge( ) RETURNS INTEGER AS '

    DECLARE 
        pacman              CURSOR FOR SELECT * FROM forsale_fsuserprofileimage;
        pellet              forsale_fsuserprofileimage%ROWTYPE;



    BEGIN 

        OPEN pacman;
        LOOP
            FETCH pacman INTO pellet;
            EXIT WHEN NOT FOUND;

            UPDATE forsale_fsuserprofile 
            SET 
                image = pellet.image,
                w = pellet.w,
                h = pellet.h
            WHERE 
                id = pellet.userprofile_id;

        END LOOP;

        RETURN( 1 );

    END;


' LANGUAGE 'plpgsql';

Solr 株式データ インポーターを捨てて、単純な CLI プログラムを作成することをお勧めします。そうすれば、クエリをいつ実行するかを制御できます。Java で記述できますが、そうする必要はありません。Solr の HTTP API を使用すると、HTTP 要求と MySQL API 呼び出しを行うことができる限り、他の言語を使用できます: Python、Ruby、curl を使用した bash スクリプト、必要に応じて PHP-CLI も使用できます。

多くの言語には、すぐに使用できる Solr の HTTP API へのバインディングが既に用意されています (この点に関しては、Python と Ruby を保証できます) が、この API を自分で使用するのがいかに簡単かを示す例を含む記事を次に示します: https: //lucene.apache.org/solr/guide/7_7/searching.html#searching

于 2012-05-15T13:55:48.223 に答える