Солр:DIH для многоязычного индекса и многозначного поля?
-
09-10-2019 - |
Вопрос
У меня есть таблица 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 и т.д.
Португальский и испанский также относятся к языкам, в которых нас предупреждали о недопустимости смешивания всех диалектов вместе, хотя различия менее заметны, и оба они по-прежнему доступны для поиска.
Конечно, возможно, вы уже знали об этом и просто не добавили это в вопрос, чтобы упростить его.Просто эта тема очень свежа в моей памяти.