我正在为我的网络应用程序测试Amazon Cloudsearch
,我遇到了一些奇怪的问题。
我有以下域索引:name
,email
,id
。
例如,我有以下数据: John Doe , John@example.com , 1
当我搜索jo
时,我什么都没得到。如果我搜索joh
我仍然什么也得不到,但如果我搜索john
,那么我会将上述文档作为点击。当我放置部分字符串时为什么没有得到?我甚至在name
和email
上启用了模糊匹配的推荐器。还有别的东西我不见了吗?我在下面看到了这个:
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页面上的表单进行搜索。
答案 0 :(得分:10)
你想做什么 - 通过搜索“jo”找到“john” - 被称为前缀搜索。
您可以通过搜索
来完成此操作(prefix field=name 'jo')
或
q=jo*
请注意,如果您使用q=jo*
方法在所有查询中附加*,则可能需要执行q=jo* |jo
之类的操作,因为john*
与john
不匹配。
这看起来有点令人困惑,但想象一下,如果谷歌给出了前缀匹配的结果:如果你搜索了侵权并找回了一堆关于龟的结果和< em>酷刑而不是侵权(一个法律术语),你会非常困惑(并且感到沮丧)。
建议者也是一种可行的方法,但这会给你提供你需要搜索的建议(如john
,jordan
和jostle
而不是结果);它不会向您返回匹配的文档。
请参阅http://docs.aws.amazon.com/cloudsearch/latest/developerguide/searching-text.html
中的“在Amazon CloudSearch中搜索前缀”答案 1 :(得分:0)
您的索引字段类型是“文本”吗?如果它们只是“文字”,那么它们必须完全匹配。
答案 2 :(得分:0)
我认为您必须将name
和email
字段设置为literal
类型而不是text
类型,否则只需对'jo'进行简单的文本搜索或'Joh'应该找到示例文档。
虽然使用前缀搜索可能已经解决了您的问题(如果字段设置为literal
类型,这是有意义的),接受的答案不是真正正确。它“像谷歌搜索”的概念不是基于文档中的任何内容。它实际上与他们使用的示例相矛盾,并且通常会混淆服务的可能性。来自docs:
当您搜索单个字词的文本和文本数组字段时,Amazon CloudSearch会按任意顺序查找在指定字段内任何位置包含搜索字词的所有文档。例如,在样本电影数据中,标题字段被配置为文本字段。如果您在标题字段中搜索星标,您会发现标题字段中任何位置包含星形的所有电影,例如星球,星球大战和星星诞生。这不同于搜索文字字段,其中字段值必须与要被视为匹配的搜索字符串相同。