如何在Google App Engine生产搜索中使用unicode值查询原子字段?

时间:2014-04-28 19:29:33

标签: google-app-engine gae-search

我使用Google App Engine搜索编写了一些文本搜索。

在SDK中,我在原子字段上测试了这样的查询:

u'tag:"wartości"'

在生产中我运行相同的查询,但它不适用于相同的数据。

如何在原子字段上进行unicode查询?

是否可以在Google App Engine搜索中使用unicode?

2 个答案:

答案 0 :(得分:1)

我们知道这个问题,并计划尽快修复。我们目前正在计划的修复程序将要求atom字段值包含完全相同的重音字符以便匹配。匹配将继续不区分大小写。我们期望至少在最初,使用组合变音符号的值将被视为与使用预组合字符的值不同的值。我们可能会根据反馈重新审视该决定,但这是我们最直接的解决方案。

有关预组合字符与组合变音符号的更多信息,请参阅此维基百科文章:

http://en.wikipedia.org/wiki/Precomposed_character

克里斯

答案 1 :(得分:0)

看起来我需要将AtomField值转换为新字符串,我也需要翻译查询。此解决方法仅允许波兰语unicode搜索。我不知道tonkenization规则所以我使用'q','x'来扩展字母表,因为没有在波兰语中使用。

# coding=utf-8

translate = {
  u'ą': u'aq',
  u'Ą': u'Aq',
  u'ć': u'cq',
  u'Ć': u'Cq',
  u'ę': u'eq',
  u'Ę': u'Eq',
  u'ł': u'lq',
  u'Ł': u'Lq',
  u'ń': u'nq',
  u'Ń': u'Nq',
  u'ó': u'oq',
  u'Ó': u'Oq',
  u'ś': u'sq',
  u'Ś': u'Sq',
  u'ż': u'zx',
  u'Ż': u'Zx',
  u'ź': u'zq',
  u'Ź': u'Zq',
}

import re

reTranslate = re.compile(u'(%s)' % u'|'.join(translate))

print reTranslate.pattern

test = u"""\
Właściwie prowadzona komunikacja wewnętrzna w firmie,\
 zwłaszcza dużej czy posiadającej rozproszoną sieć oddziałów,\
 może przynieść oszczędność czasu, a co za tym idzie, również pieniędzy."""

print reTranslate.sub(lambda match: translate[match.group(0)], test)