0

我是 Sphinx 用户 3 年了。我现在遇到的问题是集群和方面的支持。

关于方面的支持,我知道我也可以用 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
    
    }
    

如何在 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 where to select only de_job?

  2. 我在狮身人面像: 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 的日志文件时,当索引正在重建时,则停留在:

从索引中删除所有文档

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

4

1 回答 1

0
  1. 为每个索引创建单独的核心。然后每个人都会有自己的数据导入 URL。

  2. (a) min_word_len,忽略这个,不需要。(b) min_infix_len,现在可以忽略,除非您执行 lt 通配符查询。如果你这样做,那么考虑使用 Ngrams。

  3. 在您的架构中,定义一个停用词过滤器并将您的停用词放在一个文件中。更好的是,不要使用停用词。这些是 32 位计算机和 40 兆字节磁盘遗留下来的坏习惯。

  4. 您可以在架构中使用 ISOLatin1AccentFilterFactory (http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters/#solr.ISOLatin1AccentFilterFactory)。

  5. 这是正常的,直到索引完成并提交新内容后才会真正发生删除。

于 2012-08-14T20:45:33.943 回答