TYPO3 Solr搜索:将自定义索引队列限制为特定语言的核心

时间:2016-04-17 17:51:18

标签: solr typo3 typo3-7.6.x

我一直在为TYPO3(7.6.4)的ext_solr扩展名(3.1.1)摆弄一段时间。我的配置使用两个Solr内核用于两种不同的语言(英语和德语);这适用于普通页面。在TS常量中,核心配置如下:

plugin.tx_solr.solr.path = /core_en/
[globalVar = GP:L = 1]
plugin.tx_solr.solr.path = /core_de/
[end]

为了分别从数据库中获取英语和德语结果,我创建了两个不同的MySQL视图,它们给出了正确的结果。然后我继续设置为每个视图建立索引,如下所示:

plugin.tx_solr.index.queue {
[globalVar = GP:L = 0]
myindex = 1
myindex {
  table = my_view
  fields {
    abstract = abstract
    title = title
    tstamp = tstamp
    content = SOLR_CONTENT
    content {
      field = bodytext
    }
    url = TEXT
    url {
      typolink.parameter = 17
      typolink.additionalParams = &... [URL works correctly]
      typolink.additionalParams.insertData = 1
      typolink.returnLast = url
    }
  }
}
[end]
[globalVar = GP:L = 1]
myindex_de = 1
myindex {
  table = my_view_de

  fields {
    abstract = abstract
    title = title
    tstamp = tstamp
    content = SOLR_CONTENT
    content {
      field = bodytext
    }
    url = TEXT
    url {
      typolink.parameter = 17
      typolink.additionalParams = &...
      typolink.additionalParams.insertData = 1
      typolink.returnLast = url
    }
  }
}
[end]
}

但是,两种语言版本最终都在两个核心中。我能做些什么呢?

2 个答案:

答案 0 :(得分:0)

你的病情不起作用。从文档:“请注意,条件不能在大括号内使用。” https://docs.typo3.org/typo3cms/TyposcriptReference/Conditions/Index.html

你需要从根级别包装TypoScript并使第一级“plugin.tx_solr ....”冗余。

答案 1 :(得分:0)

首先:如上所述,有针对TypoScript条件的规则:

Note that conditions cannot be used inside of curly brackets.

所以你必须改变它。

其次,你的代码中有一个拼写错误:

myindex_de = 1
myindex {
  table = my_view_de

  fields {
    abstract = abstract
    title = title
    tstamp = tstamp
    content = SOLR_CONTENT
    content {
      field = bodytext
    }
    url = TEXT
    url {
      typolink.parameter = 17
      typolink.additionalParams = &...
      typolink.additionalParams.insertData = 1
      typolink.returnLast = url
    }
  }
}

第2行:它也应该是 myindex_de

一般我建议您使用不同的解决方案:

1:解决方案略有不同:

您引用了myindex和myindex_de所看到的相同字段。因此,如果在语言中唯一的区别就是在视图中将其作为 sys_language_uid 进行准备。

2:始终在工作,"终极"解决方案:

如果您有一个非常特殊的案例需要处理,您可以使用PHP代码覆盖索引器并自行创建。这是一种更好的方法,因为您可以像在视图中那样在索引器中做更多的事情。像:

  • FE用户权限。
  • 语言差异
  • 它用作单独的计划任务,您可以提供额外的任务 属性作为设置。

我已经两种方式使用了,这是真的,通过视图,您可以快速,轻松地构建一个单线"来自复杂数据结构的变体。 但是,在Indexer类中,您可以在构建内容之前完全自由地进行数据清理/数据操作。