我在 Solr search Arabic 上苦苦挣扎了好几天,并做了一些实验。这是问题的简单反映。
在我将一些阿拉伯语句子(现在只有 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'
\xd8
如您所知,从↔有一个一对一对应\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':[]}}
未找到文档,似乎使用第三个版本进行编码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
, 从浏览器(谷歌浏览器)查询时,它变成了 form3:
'\u0627\u0644\u0633\u0648\u0631\u064a'
(可以通过但转换回form1,encode('utf8')
但由于它们不同,因此搜索不匹配。
因此,这三种不同的编码策略可能是核心问题。谁能帮我弄清楚并解决搜索问题?
提前致谢。