我正在奋斗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但是因为它们不同,所以搜索不匹配。
因此,这三种不同的编码策略可能是核心问题。任何人都可以帮我搞清楚并解决搜索问题吗?
提前致谢。