私はSolrのアラビア語検索に数日間苦労しており、いくつかの実験を行いました。これが問題の簡単な反映です。
いくつかのアラビア語の文 (現在は 1 語のみ السوري ) をデータベースに保存し、Solr にインデックスを付けさせた後q=*:*&wt=python
、(wt 部分がない場合は文字化けしていた) でクエリを実行すると、応答は次のようになります。
'\u00d8\u00a7\u00d9\u201e\u00d8\u00b3\u00d9\u02c6\u00d8\u00b1\u00d9\u0160'
インデックス用にそこに保存する実際の単語は、別の方法でコーディングしています。
'\xd8\xa7\xd9\x84\xd8\xb3\xd9\x88\xd8\xb1\xd9\x8a'
お分かりのように、 from \xd8
↔に対応する one-to-to があり\u00d8
ます。しかし、このコーディングの名前がわからないので、変換できません。そして、次のように検索すると<>/select/?q=السوري&wt=python
、応答は次のようになります。
{'responseHeader':{'status':0,'QTime':0,'params':{'wt':'python','q':u'\u0627\u0644\u0633\u0648\u0631\u064a'}},'response':{'numFound':0,'start':0,'docs':[]}}
ドキュメントが見つからず、コーディングに 3 番目のバージョンを使用しているようですu'\u0627\u0644\u0633\u0648\u0631\u064a'
。私がそれを取ると、encode('utf8')
それは に戻り'\xd8\xa7\xd9\x84\xd8\xb3\xd9\x88\xd8\xb1\xd9\x8a'
ます。
要約すると、コード (python) またはデータベース (mysql) にある場合、「form1」として表示されます。
'\xd8\xa7\xd9\x84\xd8\xb3\xd9\x88\xd8\xb1\xd9\x8a'
Solr によってインデックスが作成されると、form2 に変換されます。
'\u00d8\u00a7\u00d9\u201e\u00d8\u00b3\u00d9\u02c6\u00d8\u00b1\u00d9\u0160'
そして、<>/select/?q=السوري&wt=python
ブラウザ(Google chrome)からクエリを実行するために を使用すると、form3 になります。
'\u0627\u0644\u0633\u0648\u0631\u064a'
(これは form1 に戻すことができますがencode('utf8')
、これらは異なるため、検索は何も一致しません。
したがって、これらの 3 つの異なるエンコード方法が中心的な問題である可能性があります。誰かがそれを理解し、検索の問題を解決するのを手伝ってくれませんか?
前もって感謝します。