Amazon Cloudsearch未使用部分字符串进行搜索

时间:2015-04-28 16:37:22

标签: full-text-search amazon-cloudsearch

我正在为我的网络应用程序测试Amazon Cloudsearch,我遇到了一些奇怪的问题。

我有以下域索引:nameemailid

例如,我有以下数据: John Doe John@example.com 1

当我搜索jo时,我什么都没得到。如果我搜索joh我仍然什么也得不到,但如果我搜索john,那么我会将上述文档作为点击。当我放置部分字符串时为什么没有得到?我甚至在nameemail上启用了模糊匹配的推荐器。还有别的东西我不见了吗?我在下面看到了这个:

http://docs.aws.amazon.com/cloudsearch/latest/developerguide/searching-text.html

http://docs.aws.amazon.com/cloudsearch/latest/developerguide/searching.html

http://docs.aws.amazon.com/cloudsearch/latest/developerguide/searching-compound-queries.html

我正在使用boto以及AWS页面上的表单进行搜索。

3 个答案:

答案 0 :(得分:10)

你想做什么 - 通过搜索“jo”找到“john” - 被称为前缀搜索

您可以通过搜索

来完成此操作
(prefix field=name 'jo')

q=jo*

请注意,如果您使用q=jo*方法在所有查询中附加*,则可能需要执行q=jo* |jo之类的操作,因为john*john不匹配。

这看起来有点令人困惑,但想象一下,如果谷歌给出了前缀匹配的结果:如果你搜索了侵权并找回了一堆关于龟的结果和< em>酷刑而不是侵权(一个法律术语),你会非常困惑(并且感到沮丧)。

建议者也是一种可行的方法,但这会给你提供你需要搜索的建议(如johnjordanjostle而不是结果);它不会向您返回匹配的文档。

请参阅http://docs.aws.amazon.com/cloudsearch/latest/developerguide/searching-text.html

中的“在Amazon CloudSearch中搜索前缀”

答案 1 :(得分:0)

您的索引字段类型是“文本”吗?如果它们只是“文字”,那么它们必须完全匹配。

答案 2 :(得分:0)

我认为您必须将nameemail字段设置为literal类型而不是text类型,否则只需对'jo'进行简单的文本搜索或'Joh'应该找到示例文档。

虽然使用前缀搜索可能已经解决了您的问题(如果字段设置为literal类型,这是有意义的),接受的答案不是真正正确。它“像谷歌搜索”的概念不是基于文档中的任何内容。它实际上与他们使用的示例相矛盾,并且通常会混淆服务的可能性。来自docs

  

当您搜索单个字词的文本和文本数组字段时,Amazon CloudSearch会按任意顺序查找在指定字段内任何位置包含搜索字词的所有文档。例如,在样本电影数据中,标题字段被配置为文本字段。如果您在标题字段中搜索星标,您会发现标题字段中任何位置包含星形的所有电影,例如星球,星球大战和星星诞生。这不同于搜索文字字段,其中字段值必须与要被视为匹配的搜索字符串相同。