Sphinx用户正在切换到Solr

时间:2012-08-14 16:20:53

标签: solr sphinx

我是Sphinx用户3年以来。我现在面临的问题是聚类和方面的支持。

关于facet支持,我知道我也可以使用sphinx并且它会运行,因为聚类对我来说是一个非常大的问题。

我非常喜欢Sphinx,因为它易于使用且速度非常快,但我需要在接下来的几个月内更换为Solr。

如果有人有时间解释我,我想知道一些基础知识。我将在Sphinx中发布一些例子,我希望你能在Solr中给我一个例子。

作为安装,我在Debian上选择了Solr和Tomcat:

apt-get install solr-tomcat curl -y

Tomcat的这个选项更好(更快,更稳定......)然后是Jetty吗?两者都支持群集吗?

其次我用这个生成了一个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. 我在sphinx中有超过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
    
    }
    
  2. 如何在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. 如何仅重新索引一个索引?重建索引查询中是否有任何参数: 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. 在我旋转索引的索引中,然后sphinx正在创建一个tmp文件,重新索引数据并动态旋转它。通过这种方式,我的应用程序正在运行,其中sphinx正在重新索引所有内容。如何用Solr解决这个问题?当我查看Solr的日志文件时,当索引正在重建时,那就是停留:

    6. 从索引中删除所有文件

      有什么不好,因为在我的应用程序无法运行的时候。我怎样才能以优雅的方式解决这个问题?

1 个答案:

答案 0 :(得分:0)

  1. 为每个索引创建单独的核心。然后每个人都有自己的dataimport 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. 这是正常的,在索引完成并提交新内容之前,删除实际上不会发生。