0

私は 3 年間 Sphinx ユーザーです。私が今直面している問題は、クラスタリングとファセットのサポートです。

ファセットのサポートについては、sphinx でも作成でき、実行されることはわかっていますが、クラスタリングは将来的に非常に大きな問題の 1 つです。

Sphinx は使いやすく、非常に高速であるため、私は本当に気に入っていますが、今後数か月で Solr に変更する必要があります。

誰かが私に説明する時間があれば、いくつかの基本を知りたいです。Sphinx でいくつかの例を投稿します。Solr での例を教えていただければ幸いです。

インストールとして、Debian で Solr と Tomcat を選択しました。

apt-get install solr-tomcat curl -y

Tomcat を使用したこのオプションは、Jetty よりも優れていますか (高速で安定しています...)? どちらもクラスタリングをサポートしていますか?

次に、これを使用して 1 つの Dataimport Handler を生成しました。

<dataSource type="JdbcDataSource"
              driver="com.mysql.jdbc.Driver"
              url="jdbc:mysql://localhost/database"
              user="root"
              password="root" 
      batchSize="-1"/>

<document name="doc">
    <entity name="de_job"
              query="select * from de_job">
        <field column="title" name="title" />
    <field column="description" name="description" />
    <field column="job_id" name="id" />
    </entity>
</document>

私が電話するとき:

http://domain.com:8080/solr/dataimport?command=full-import

次に、5分で1,6Mを超えるデータ行のインデックスを作成します。これは素晴らしい。

そして、ここに私の質問があります:

  1. 私はスフィンクスに複数のインデックスを持っており、一度にすべてではなく、異なる時間にインデックスを再作成したいと考えています。

    index de_jobs
    {
     source                  = de_jobs
     path                    = /usr/local/sphinx/var/data/jobs_de
     docinfo                 = extern
     charset_type            = utf-8
     charset_table           = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, \
                    U+430..U+44F,U+C5->U+E5, \
                    U+E5, U+C4->U+E4, U+E4, U+D6->U+F6, U+F6, U+16B, U+0c1->a, U+0c4->a, U+0c9->e, U+0cd->i, \
                    U+0d3->o, U+0d4->o, U+0da->u, U+0dd->y, U+0e1->a, U+0e4->a, U+0e9->e, U+0ed->i, U+0f3->o, \
                    U+0f4->o, U+0fa->u, U+0fd->y, U+104->U+105, U+105, U+106->U+107, U+10c->c, U+10d->c, \
                    U+10e->d, U+10f->d, U+116->U+117, U+117, U+118->U+119, U+11a->e, U+11b->e, U+12E->U+12F, \
                    U+12F, U+139->l, U+13a->l, U+13d->l, U+13e->l, U+141->U+142, U+142, U+143->U+144, \
                    U+144,U+147->n, U+148->n, U+154->r, U+155->r, U+158->r, U+159->r, U+15A->U+15B, U+15B, \
                    U+160->s, U+160->U+161, U+161->s, U+164->t, U+165->t, U+16A->U+16B, U+16B, U+16e->u, \
                    U+16f->u, U+172->U+173, U+173, U+179->U+17A, U+17A, U+17B->U+17C, U+17C, U+17d->z, \
                    U+17e->z, U+DC->U+FC, U+DF, U+FC,
    min_word_len            = 3
    min_infix_len           = 7
    stopwords               = /usr/local/sphinx/var/stopwords/stop_words_de.txt
    
    }
    
    index at_jobs
    {
     source                  = at_jobs
     path                    = /usr/local/sphinx/var/data/jobs_at
     docinfo                 = extern
     charset_type            = utf-8
     charset_table           = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, \
                    U+430..U+44F,U+C5->U+E5, \
                    U+E5, U+C4->U+E4, U+E4, U+D6->U+F6, U+F6, U+16B, U+0c1->a, U+0c4->a, U+0c9->e, U+0cd->i, \
                    U+0d3->o, U+0d4->o, U+0da->u, U+0dd->y, U+0e1->a, U+0e4->a, U+0e9->e, U+0ed->i, U+0f3->o, \
                    U+0f4->o, U+0fa->u, U+0fd->y, U+104->U+105, U+105, U+106->U+107, U+10c->c, U+10d->c, \
                    U+10e->d, U+10f->d, U+116->U+117, U+117, U+118->U+119, U+11a->e, U+11b->e, U+12E->U+12F, \
                    U+12F, U+139->l, U+13a->l, U+13d->l, U+13e->l, U+141->U+142, U+142, U+143->U+144, \
                    U+144,U+147->n, U+148->n, U+154->r, U+155->r, U+158->r, U+159->r, U+15A->U+15B, U+15B, \
                    U+160->s, U+160->U+161, U+161->s, U+164->t, U+165->t, U+16A->U+16B, U+16B, U+16e->u, \
                    U+16f->u, U+172->U+173, U+173, U+179->U+17A, U+17A, U+17B->U+17C, U+17C, U+17d->z, \
                    U+17e->z, U+DC->U+FC, U+DF, U+FC,
    min_word_len            = 3
    min_infix_len           = 7
    stopwords               = /usr/local/sphinx/var/stopwords/stop_words_de.txt
    
    }
    

Solr 2以上の異なるインデックスで有効にする方法は?

これは以下のフォームの別のエンティティですか?

<entity name="de_job"
              query="select * from de_job">
        <field column="title" name="title" />
    <field column="description" name="description" />
    <field column="job_id" name="id" />
    </entity>

<entity name="at_job"
              query="select * from at_job">
        <field column="title" name="title" />
    <field column="description" name="description" />
    <field column="job_id" name="id" />
    </entity>
  1. 1 つのインデックスのみを再インデックスするにはどうすればよいですか? 再インデックスクエリにパラメータはありますか: http://domain.com:8080/solr/dataimport?command=full-importたとえば、de_job のみを選択する場所は?

  2. 私は Sphinx に持っています: min_word_len と min_infix_len 。Solrでこれを使用する方法は? どこで設定できますか?

  3. Sphinx でカスタム ストップワードを定義しました。各インデックスに対してSolrでそれらを定義して使用する方法は?

  4. sphinx では、charset_table によって翻訳されていない場合、sphinx はドイツ語のウムラウト文字やその他の UTF-8 文字を検索できないため、charset_table を定義する必要があります。Solrでも同じことが必要ですか?

  5. インデックスでインデックスをローテーションすると、スフィンクスが tmp ファイルを作成し、データのインデックスを再作成してその場でローテーションします。このようにして、Sphinx がすべてのインデックスを再作成している間に、アプリケーションが実行されます。この問題を Solr で解決するにはどうすればよいですか? Solrのログファイルを見ると、インデックスが再構築されているときは、そのままです:

インデックスからすべてのドキュメントを削除する

悪いのは、その間に私のアプリが機能しないからです。これをエレガントな方法で解決するにはどうすればよいですか?

4

1 に答える 1

0
  1. インデックスごとに個別のコアを作成します。次に、それぞれに独自のデータインポート URL があります。

  2. (a) min_word_len、これは無視してください。必要ありません。(b) min_infix_len は、多くのワイルドカード クエリを実行しない限り、今のところ無視できます。その場合は、Ngrams の使用を検討してください。

  3. スキーマで、ストップワード フィルターを定義し、ストップワードをファイルに入れます。さらに良いことに、ストップワードを使用しないでください。これらは、32 ビットのコンピューターと 40 メガバイトのディスクに残された悪い習慣です。

  4. スキーマで ISOLatin1AccentFilterFactory を使用できます (http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters/#solr.ISOLatin1AccentFilterFactory)。

  5. これは正常です。インデックス作成が完了し、新しいコンテンツがコミットされるまで、削除は実際には行われません。

于 2012-08-14T20:45:33.943 に答える