Google协作平台API全文搜索不适用于非西方语言

时间:2014-11-11 05:00:16

标签: full-text-search tokenize google-sites google-data-api

在我的JavaEE应用程序中,我使用基于Atom的Google Sites API来检索非公开Goog​​le网站上的内容。从本质上讲,我们将Google网站用作轻量级CMS,并且在应用程序中我使用API​​检索网站内容以提供我的在线帮助系统。我有一段时间没有这个设置,而且它正在顺利工作。

问题

在我的应用程序中,我需要为在线帮助系统添加全文搜索功能。我知道此功能请求会在某个时刻出现,因此在决定使用Google协作平台托管我的内容时,我检查了Sites API是否支持全文搜索。 It does。例如,以下网址会在整个网站my-site中搜索包含关键字user的网页。

https://sites.google.com/feeds/content/my.doma.in/my-site?q=user

这有效,并为我提供了预期的结果页面。但它只对仅针对用西方语言编写的内容,或者更具体地说,是用空格和标点符号分隔标记/单词的语言。当我在日语内容上运行类似搜索时,搜索关键字ユーザー

https://sites.google.com/feeds/content/my.doma.in/my-site?q=%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC

我只会获得搜索词显示为裸字符串的结果页面,即由空格或标点符号分隔。由于日语是用scriptio continua编写的语言,这还不够。包含的页面,例如:

  

ご自身の的ユーザー基本情报の确认

不会显示在结果中。因此,似乎在幕后使用的搜索索引是基于“西方”词汇规则创建的,并且日语内容未正确标记化。但是,当我从Google网站的搜索此网站字段中搜索相同的关键字时,我会得到正确的结果。我的结论是存在正确的标记化索引,但似乎无法将其用于基于API的搜索

到目前为止我尝试了什么

为了解决这种情况,这些是我到目前为止探索过的途径:

  • 我尝试在Google协作平台中查找语言设置。有一个通用的UI语言设置已经设置为日语,并且对API查询结果没有影响。没有每页或每模板语言设置来强制索引器/标记器的工作。
  • 我尝试用双引号("ユーザー")引用搜索字符串。
  • 我尝试过包含通配符(*ユーザー*)。
  • 我尝试在其他Google API中使用其他语言参数:langhl(界面语言),rl(结果语言),...
  • 我尝试过创建Google Custom Search Engine,但似乎无法在非公开的Google网站上使用它。

所以...

我很快就没有想法了。在最糟糕的情况下,我最终将不得不自己检索,标记和索引所有内容,并使其可以通过这种方式进行搜索。由于这需要大量工作,我想知道是否有人遇到过同样的问题,并找到了可接受的解决方法或解决方案。


更新1

我还没有找到针对此问题的优雅解决方案,因此我在Google Apps API问题跟踪器上提出了一个缺陷:https://code.google.com/a/google.com/p/apps-api-issues/issues/detail?id=3780

更新2

经过一些反复的讨论,谷歌的工程师已经承认问题确实存在于所描述的内容,并且“在内部提交了问题”。从那以后,缺陷票一直停留在分类状态。如果您和我一样有兴趣看到此问题已解决,请花一点时间在Google's issue tracker上加注星标/投票。

1 个答案:

答案 0 :(得分:3)

我知道当你的应用程序不符合定义的最后期限时等待某些人支持处理API错误的感觉。你描述的问题听起来真的像一个bug,所以对于" clean"解决方案,你将不得不等到谷歌网站团队的人将解决这个错误(我已经upvoted :))你将能够简单地使用搜索API。

然而,与此同时,我认为你应该尝试一些解决方法。我可能会建议你一个不同的解决方案,不能满足你100%的需求,但可能会有用。例如,配置您的网站以使用丰富的搜索API公开聚合数据Feed以供应处理器 - 它可能是一个RSS源,其中包含由Feedly烧录的Google网站上的所有文章,这些文章具有良好的多语言搜索API支持( Search the content of a stream)以及强大的身份验证,以保护您的数据隐私。

作为一名架构师,我知道这不是解决问题的正确方法,但是一旦它帮助我构建一个完全可搜索的应用程序,使用俄语和乌克兰语区域聚合来自100多个不同数据源的数据。

在您的应用程序开发中祝您好运,并告诉我这个解决方案是否对您有所帮助! :)