3

我在 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')但由于它们不同,因此搜索不匹配。

因此,这三种不同的编码策略可能是核心问题。谁能帮我弄清楚并解决搜索问题?

提前致谢。

4

0 回答 0