solr:多言語インデックスとマルチバリュー化フィールドの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)
);
solr dihについて2つの質問があります:
1) 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はこのようなユーザーを処理できますか?それを行うように構成するにはどうすればよいですか?
2) tags
フィールドはsolrにインデックス作成する必要があります multiValued
分野。複数の値は、コンマで区切られた文字列に保存されます。たとえば、if 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" />
スクリプトがDataSourceのすぐ下に定義されています。
<script><![CDATA[
function ftextLang(row){
var name = row.get('language_code');
var value = row.get('text');
row.put('text_'+name, value); return row;
}
]]></script>
他のヒント
ごめんなさい、あなたのDIHの質問について直接答えを持っていませんが、知るのは面白いでしょう。
私はあなたの2文字の言語コードに気づき、5文字のスロットを提案しました。一部の言語には、些細な方言の違いがあります。たとえば、単純化された中国人対伝統的な中国人。形態学的分析のために、SMARTCNフィルターはZH-CNを処理できますが、Zh-Twなどは処理できません。
ポルトガル語とスペイン語は、すべての方言を一緒に混ぜることに対して私たちが警告されている言語でもありますが、違いはあまり劇的ではなく、両方とも検索可能です。
もちろん、あなたはすでにこれを知っているかもしれませんが、それを単純に保つためにそれを質問に追加しなかっただけかもしれません。それは私の心に非常に新鮮な主題です。