Различная языковая индексация в Solr
У меня есть данные для двух языков, английского и корейского, я уже проиндексировал данные для английского языка, мне нужно проиндексировать данные для корейского языка. Я провел некоторое исследование и обнаружил, что есть встроенная поддержка для нескольких языков, но я не могу найти корейский язык явно там, например, как я могу видеть для других языков, например, немецкий, французский и т. Д. Я застрял в том, как сделать это для корейского язык.
Я попытался использовать токен CJK в поле скажем поле 1, которое является text_general в схеме, поэтому я создал копию и поместил ее как text_general_cjk, но я получил ошибку как недопустимое unknown_field_type fieldname text_general_cjk
Ниже моя схема, мне нужно обновить только asr_hypothesis, nlg_output, nlu_utterance, файл может содержать данные на любом из двух языков. поэтому схема должна быть способна определять указанный язык и индексировать соответственно
<?xml version="1.0" encoding="UTF-8" ?>
<schema name="default-config" version="1.6">
<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<!-- docValues are enabled by default for long type so we don't need to index the version field -->
<field name="_version_" type="plong" indexed="false" stored="false"/>
<field name="_root_" type="string" indexed="true" stored="false" docValues="false" />
<field name="_text_" type="text_general" indexed="true" stored="false" multiValued="true"/>
<field name="sid" type="strings" indexed="false" stored="true" multiValued="false" default=" "/>
<field name="model_id" type="strings" indexed="true" stored="true" multiValued="false" default=" "/>
<field name="language_code" type="strings" indexed="true" stored="true" multiValued="false" default=" "/>
<field name="country_code" type="strings" indexed="true" stored="true" multiValued="false" default=" "/>
<field name="client_datetime" type="strings" indexed="false" stored="true" multiValued="false" default=" "/>
<field name="bixby_version" type="strings" indexed="true" stored="true" multiValued="false" default=" "/>
<field name="resource_flag" type="strings" indexed="false" stored="true" multiValued="false" default=" "/>
<field name="command_mode_04" type="strings" indexed="false" stored="true" multiValued="false" default=" "/>
<field name="command_mode_08" type="strings" indexed="false" stored="true" multiValued="false" default=" "/>
<field name="utterance_type" type="strings" indexed="false" stored="true" multiValued="false" default=" "/>
<field name="output_method" type="strings" indexed="false" stored="true" multiValued="false" default=" "/>
<field name="audio_length" type="strings" indexed="false" stored="true" multiValued="false" default=" "/>
<field name="asr_hypothesis" type="text_general" indexed="true" stored="true" multiValued="false" default=" "/>
<field name="asr_silence" type="strings" indexed="false" stored="true" multiValued="false" default=" "/>
<field name="agent" type="strings" indexed="true" stored="true" multiValued="false" default=" "/>
<field name="command_name" type="strings" indexed="false" stored="true" multiValued="false" default=" "/>
<field name="screen_states" type="strings" indexed="false" stored="true" multiValued="false" default=" "/>
<field name="rule_id" type="strings" indexed="false" stored="true" multiValued="false" default=" "/>
<field name="is_root" type="strings" indexed="false" stored="true" multiValued="false" default=" "/>
<field name="app_list" type="strings" indexed="false" stored="true" multiValued="false" default=" "/>
<field name="execute_app" type="text_general" indexed="true" stored="true" multiValued="false" default=" "/>
<field name="event_1010_rule_id" type="text_general" indexed="true" stored="true" multiValued="false" default=" "/>
<field name="is_complete_generation_time" type="strings" indexed="false" stored="true" multiValued="false" default=" "/>
<field name="is_complete" type="strings" indexed="false" stored="true" multiValued="false" default=" "/>
<field name="landing_type" type="strings" indexed="false" stored="true" multiValued="false" default=" "/>
<field name="nlg_output" type="text_general" indexed="false" stored="true" multiValued="false" default=" "/>
<field name="thumbs_result" type="strings" indexed="false" stored="true" multiValued="false" default=" "/>
<field name="close_type" type="strings" indexed="false" stored="true" multiValued="false" default=" "/>
<field name="event_22" type="strings" indexed="false" stored="true" multiValued="false" default=" "/>
<field name="chatbot_resp_id" type="strings" indexed="false" stored="true" multiValued="false" default=" "/>
<field name="nlu_utterance" type="text_general" indexed="true" stored="true" multiValued="false" default=" "/>
<field name="nlu_matched_domain" type="text_general" indexed="true" stored="true" multiValued="false" default=" "/>
<field name="nlu_display_text" type="text_general" indexed="false" stored="true" multiValued="false" default=" "/>
<field name="nlg_display_text" type="text_general" indexed="false" stored="true" multiValued="false" default=" "/>
<field name="dc_agent" type="strings" indexed="false" stored="true" multiValued="false" default=" "/>
<field name="nlu_bixby_state_ids" type="text_general" indexed="true" stored="true" multiValued="false" default=" "/>
<field name="user_type" type="strings" indexed="false" stored="true" multiValued="false" default=" "/>
<field name="rule_chooser_result" type="strings" indexed="false" stored="true" multiValued="false" default=" "/>
<field name="fe_client_time" type="strings" indexed="false" stored="true" multiValued="false" default=" "/>
<field name="command_type" type="strings" indexed="false" stored="true" multiValued="false" default=" "/>
<field name="completeness" type="text_general" indexed="true" stored="true" multiValued="false" default=" "/>
<field name="fr_om" type="strings" indexed="false" stored="true" multiValued="false" default=" "/>
<field name="event_28" type="strings" indexed="false" stored="true" multiValued="false" default=" "/>
<field name="event_29" type="strings" indexed="false" stored="true" multiValued="false" default=" "/>
<field name="event_31" type="strings" indexed="false" stored="true" multiValued="false" default=" "/>
<field name="event_32" type="strings" indexed="false" stored="true" multiValued="false" default=" "/>
<field name="event_33" type="strings" indexed="false" stored="true" multiValued="false" default=" "/>
<field name="nlu_open_qa_session_id" type="strings" indexed="false" stored="true" multiValued="false" default=" "/>
<field name="nlu_is_open_qa_session" type="strings" indexed="false" stored="true" multiValued="false" default=" "/>
<field name="nlu_viv_capsule" type="strings" indexed="false" stored="true" multiValued="false" default=" "/>
<field name="nlu_viv_goal" type="strings" indexed="false" stored="true" multiValued="false" default=" "/>
<field name="yyyymmdd" type="strings" indexed="true" stored="true" multiValued="false" default=" "/>
1 ответ
Недостаточно просто добавить cjk
к вашему типу поля, так что он волшебным образом начнет работать:
Вам нужно указать fieldType с именем text_general_cjk
в схеме. Ниже приведен очень простой пример, который вы должны расширить с учетом ваших потребностей:
<fieldType name="text_general_cjk" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.ICUTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.ICUTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
Просто используйте специальный ICUTokenizer, который подходит и для языков CJK. Вы можете добавить еще несколько, в зависимости от ваших потребностей, список есть (посмотрите также на специфику CJK)
После этого вы можете добавить поле:
<field name="text_cjk" type="text_general_cjk" indexed="true" stored="false"/>
и только после этого вы сможете индексировать свои документы с этим полем. Не забывайте, что вам нужно перезапустить Solr и переиндексировать после того, как вы внесете следующие изменения в схему.
Поскольку фильтры ICU не являются частью библиотек Solr по умолчанию, вам необходимо добавить их в solrconfig.xml
с lucene-analyzers-icu
яс