我正在将 Elasticsearch 与 Python 客户端一起使用,我对 unicode、ES、分析器和表情符号之间的交互有疑问。当我尝试通过 ES 分析器运行包含表情符号字符的 unicode 文本字符串时,它似乎搞砸了结果输出中的术语偏移量。
例如:
>> es.indices.analyze(body=u'\U0001f64f testing')
{u'tokens': [{u'end_offset': 10,
u'position': 1,
u'start_offset': 3,
u'token': u'testing',
u'type': u'<ALPHANUM>'}]}
这给了我术语测试的错误偏移量。
>> u'\U0001f64f testing'[3:10]
u'esting'
如果我用另一个 unicode 外来字符(例如日元符号)来做,我不会得到同样的错误。
>> es.indices.analyze(body=u'\u00A5 testing')
{u'tokens': [{u'end_offset': 9,
u'position': 1,
u'start_offset': 2,
u'token': u'testing',
u'type': u'<ALPHANUM>'}]}
>> u'\u00A5 testing'[2:9]
u'testing'
谁能解释发生了什么?