TYPO3 Solr Search: ограничить очередь настраиваемых индексов ядром для определенного языка

Некоторое время я возился с расширением ext_solr (3.1.1) для TYPO3 (7.6.4). Моя конфигурация использует два ядра 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]
}

Однако обе языковые версии попадают в оба ядра. Что я могу с этим поделать?


person Sascha Kersken    schedule 17.04.2016    source источник


Ответы (2)


Ваше состояние не работает. Из документации: «Обратите внимание, что условия нельзя использовать внутри фигурных скобок». https://docs.typo3.org/typo3cms/TyposcriptReference/Conditions/Index.html

Вам нужно обернуть TypoScript от корневого уровня вверх и сделать первые уровни «plugin.tx_solr. ...» избыточными.

person sven    schedule 18.04.2016
comment
Спасибо. Я изменил конфигурацию в соответствии с вашим ответом, но теперь инициализация очереди индекса предлагает мне только английскую версию (myindex), но не немецкую (myindex_de). Есть другие идеи? - person Sascha Kersken; 19.04.2016
comment
@SaschaKersken: См. Мой ответ выше, у вас все еще есть опечатка в вашем TypoScript - person András Ottó; 20.04.2016

Прежде всего: как уже упоминалось, существует правило для условий 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, чтобы переопределить индексатор и создать свой собственный. Это лучший подход, потому что внутри индексатора можно сделать гораздо больше, чем просто в представлении. Нравится:

  • Права пользователя ИП.
  • Языковые различия
  • Он используется как отдельная задача Планировщика, и вы можете указать ему дополнительные свойства в качестве настроек.

Я уже использовал оба способа, и это правда, что с представлением вы можете быстро и легко построить «однострочный» вариант из сложной структуры данных. Однако в классе индексатора у вас есть полная свобода очищать данные / манипулировать данными, прежде чем вы создадите свой контент вместе.

person András Ottó    schedule 20.04.2016
comment
Спасибо, я попробую прямо сейчас. Что касается упомянутой вами опечатки: ее нет в реальном коде, но она произошла, когда я анонимизировал и упростил реальный код, чтобы опубликовать его здесь. - person Sascha Kersken; 20.04.2016