处理阿拉伯字符串时Solr搜索错误

时间:2012-12-14 23:14:09

标签: unicode solr utf-8 encode arabic

我正在奋斗Solr搜索阿拉伯语几天并做了一些实验。这是问题的简单反映。

在我将一些阿拉伯语句子(现在只有1个单词的السوري)存储到数据库中并让Solr对其进行索引之后,然后通过q=*:*&wt=python查询(如果没有wt部分,它是乱码字符),则响应为:< / p>

'\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从浏览器(Google Chrome)查询时,它变为form3:

'\u0627\u0644\u0633\u0648\u0631\u064a'

(可以通过encode('utf8')转换回form1但是因为它们不同,所以搜索不匹配。

因此,这三种不同的编码策略可能是核心问题。任何人都可以帮我搞清楚并解决搜索问题吗?

提前致谢。

0 个答案:

没有答案