Солр:DIH для многоязычного индекса и многозначного поля?

StackOverflow https://stackoverflow.com/questions/4174634

Вопрос

У меня есть таблица MySQL:

CREATE TABLE documents (
    id INT NOT NULL AUTO_INCREMENT,
    language_code CHAR(2),
    tags CHAR(30),
    text TEXT,
    PRIMARY KEY (id)
);

У меня есть 2 вопроса о Solr DIH:

1) The langauge_code поле указывает, на каком языке text поле введено.И в зависимости от языка, я хочу проиндексировать text для разных полей Solr.

# pseudo code

if langauge_code == "en":
    index "text" to Solr field "text_en"
elif langauge_code == "fr":
    index "text" to Solr field "text_fr"
elif langauge_code == "zh":
    index "text" to Solr field "text_zh"
...

Может ли DIH обработать usecase, подобный этому?Как мне настроить его для этого?

2) Тот самый tags поле должно быть проиндексировано в Solr multiValued поле.Несколько значений хранятся в строке, разделенной запятой.Например, если tags содержит строку "blue, green, yellow" затем я хочу проиндексировать 3 значения "blue", "green", "yellow" в многозначное поле Solr.

Как мне сделать это с DIH?

Спасибо.

Это было полезно?

Решение

Сначала ваша схема должна разрешить это с помощью чего-то вроде этого:

<dynamicField name="text_*" type="string" indexed="true" stored="true" />

Затем в вашей конфигурации DIH что-то вроде этого:

<entity name="document" dataSource="ds1" transformer="script:ftextLang" query="SELECT * FROM documents" />

При этом скрипт определяется непосредственно под источником данных:

<script><![CDATA[
  function ftextLang(row){
     var name = row.get('language_code');
     var value = row.get('text');
     row.put('text_'+name, value); return row;
  }
]]></script>

Другие советы

Мне жаль, что у меня нет прямого ответа на ваш личный вопрос, хотя было бы интересно узнать.

Я заметил ваш двухбуквенный языковой код и предлагаю использовать слот из 5 букв.Некоторые языки имеют нетривиальные диалектные различия.Например, Упрощенный китайский противТрадиционный китайский язык.Для морфологического анализа фильтр SmartCN может обрабатывать zh-cn, но не zh-tw и т.д.

Португальский и испанский также относятся к языкам, в которых нас предупреждали о недопустимости смешивания всех диалектов вместе, хотя различия менее заметны, и оба они по-прежнему доступны для поиска.

Конечно, возможно, вы уже знали об этом и просто не добавили это в вопрос, чтобы упростить его.Просто эта тема очень свежа в моей памяти.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top