2015-04-28 54 views
2

我正在測試Amazon Cloudsearch爲我的web應用程序,我遇到了一些奇怪的問題。亞馬遜Cloudsearch不使用部分字符串搜索

我有以下域索引:name,email,id

例如,我有這樣的數據:李四[email protected]

當我搜索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

我正在使用博託以及與AWS網頁上的表格中搜索。

回答

8

你想做什麼 - 通過搜索「jo」找到「john」 - 被稱爲前綴搜索

您可以通過搜索

(prefix field=name 'jo') 

q=jo* 

請注意,如果您使用追加*您的所有疑問的q=jo*方法,你可能想要做這樣的事情q=jo* |jo做到這一點因爲john*將不匹配john

這似乎有點混亂,但想象一下,如果谷歌還給結果前綴匹配:如果您搜索侵權並得到返回結果一塌糊塗約折磨代替侵權(一法律術語),你會很困惑(和沮喪)。

建議者也是一種可行的方法,但這會給你回建議(如johnjordanjostle而不是結果),然後您需要搜索;它不會將匹配的文檔返回給您。

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

0

「搜索亞馬遜CloudSearch前綴」你的索引字段類型「文本」?如果他們只是「文字」,他們必須完全匹配。

0

我想你一定有你的nameemail字段設置爲literal類型,而不是text類型,否則簡單的文本搜索「喬」或「荷蘭Joh」應該已經找到了例子文件。

在使用前綴搜索可能會解決你的問題(這是有道理的,如果字段設置爲literal型),公認的答案是不是真的正確。它「像谷歌搜索」的概念並不基於文檔中的任何內容。它實際上與他們使用的例子相矛盾,並且通常會混淆服務的可能性。從docs

當您搜索的個別條款文本和文本陣列領域,亞馬遜CloudSearch查找包含指定字段內的任何地方的搜索詞,以任意順序的所有文件。例如,在示例電影數據中,標題字段被配置爲文本字段。如果您搜索標題欄作爲明星,您會在標題欄中的任意位置找到包含明星的所有電影,例如星星,星球大戰以及星星誕生。這與搜索文字字段不同,字段值必須與要視爲匹配的搜索字符串相同。