TYPO3 Solr Search:将自定义索引队列限制为特定语言的核心
一段时间以来,我一直在为TYPO3(7.6.4)修改ext_solr扩展(3.1.1)。我的配置为两种不同的语言(英语和德语)使用两个Solr内核;这对于普通页面来说效果非常好。在TS常量中,核心配置如下:TYPO3 Solr Search:将自定义索引队列限制为特定语言的核心,solr,typo3,typo3-7.6.x,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.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]
}
然而,这两种语言版本最终都包含在两个核心中。对此我能做些什么吗?你的情况不正常。文档中写道:“请注意,条件不能在花括号内使用。”
您需要从根级别开始包装打字脚本,并使第一个级别“plugin.tx_solr…”多余 首先:如上所述,打字条件有一个规则:
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
}
}
}
第二行:也应该是myindex\u de
一般而言我建议您采用不同的解决方案:
1:稍有不同的解决方案:
您引用的字段与我在myindex和myindex\u de中看到的字段相同。因此,如果唯一不同的是语言,那么在您的视图中,将其准备为sys\u language\u uid是有意义的
2:始终有效的“终极”解决方案:
如果要处理一个非常特殊的情况,可以使用PHP代码重写索引器并创建自己的索引。这是一种更好的方法,因为您可以在索引器内部制作更多的内容,就像在视图中一样。比如:
- FE用户权限李>
- 语言差异
- 它用作一个单独的调度程序任务,您可以提供额外的 属性作为它的设置
但是,在Indexer类中,在一起构建内容之前,您可以完全自由地进行数据清理/数据操作 谢谢。我根据您的回答更改了配置,但是现在索引队列初始化只提供英文版本(myindex),而不是德语版本(myindex_de)。还有其他想法吗?@SaschaKersken:看我上面的答案,你的打字稿中还有一个打字错误谢谢,我现在就去试试。至于你提到的打字错误:它不是在真实的代码中,而是在我匿名并简化真实代码后发布到这里时发生的。