从2011 API迁移后,CloudSearch通配符查询无法使用2013 API

时间:2015-09-23 16:13:59

标签: amazon-web-services amazon-cloudsearch

我最近将CloudSearch实例从2011升级到2013 API。两个实例都有一个名为rowid的字段,该字段是一个文本字段,其中包含两个字母的代码,后跟一些数字,例如LC12345。使用2011 API,如果我运行这样的搜索:

$conn->lastInsertRowid()

...我得到了1个结果,这很棒。但是结果的sid是sid,这就是索引的方式。数字12345 不会出现在任何结果文档字段中的任何其他位置。我不明白为什么会这样。我只能假设这种类型的查询在任何包含数字12345的字段中查找任何字词。

我问的原因是因为当我使用2013 API查询时,此功能现已中断。我需要使用结构化查询解析器,但即使是使用简单解析器的可比较的通配符查询也无法工作,例如。

q=12345*&return-fields=sid,name,desc

...什么都不返回,虽然文档肯定存在,即如果我查询LC12345它找到了文档。

如果我能弄清楚如何使简单查询像以前一样工作,那至少可以让我开始研究如何使用结构化语法。

2 个答案:

答案 0 :(得分:1)

为什么它无法正常工作

CloudSearch v1(2011)有一种不同的方式来标记混合的alpha +数字字符串。这是存档docs(强调我的)中描述的逻辑。

  

如果字符串包含字母和数字字符且位于   至少三个,不超过九个字符长,字母和   字符串的数字部分被视为单独的标记。 :用于   例如,字符串DOC298被标记为两个术语:doc 298

CloudSearch v2(2013)text processing跟随Unicode Text Segmentation,后者未指定该行为:

  

不要在数字序列或与字母相邻的数字(“3a”或“A3”)内断开。

解决方案

您应该能够搜索*12345以获取任何前缀的结果。可能会有一些边缘情况,比如找回你不想要的结果(比较像AB99912345的数字更多的东西);我不太了解您的数据,无法说明这些是否真的存在问题。

另一种选择是将数字前缀与字母后缀分开索引,但这可能是不必要的额外工作。

答案 1 :(得分:0)

我猜您正在以英语使用Cloudsearch,所以也许这不是您的特定问题,但还要注意搜索查询中的停用词:

https://docs.aws.amazon.com/cloudsearch/latest/developerguide/configuring-analysis-schemes.html#stopwords

在您的示例中,单词“ jo”在丹麦语和另一种语言中是停用词,当然,受支持的语言具有停用词的词典,该词典中有非常常见的停用词。如果您在文本字段中未指定语言,则它将为英语。您可以在这里看到它们:https://docs.aws.amazon.com/cloudsearch/latest/developerguide/text-processing.html#text-processing-settings