2015-10-15 69 views
1

的搜索API在我的Python GAE應用自定義拼寫檢查,我可以讓用戶在使用搜索API,我初步建成具有確切標記的文件項查詢,但點擊率是由於需要存在拼寫糾正,因此沒有太多。 我發現的方式是通過數據存儲區實現字符數據庫,因爲這可以確保用戶正確輸入至少一部分字詞。在數據存儲上這需要很多時間。 例如,如何實現GAE

"hello"(分成)["hello", "ello", "hell", "hel", "elo", "llo", "he", "el", "ll", "lo"]

,當我搜索"helo" tags -["hel", "elo", "he", "el", "lo"](給予積極的匹配)

我根據來自字相匹配的標籤的長度排名。

上的數據存儲, 我不得不指數突破這些性格與它們匹配的實體一起單獨的n-gram。並且對於每個詞以類似的方式對每個標籤執行搜索。這需要很多時間。

是否有使用搜索API實現類似的操作方式。 MatchScore是否查看「OR」的多個字段? 尋找方法設計搜索文檔並在最少的操作中執行多個拼寫糾正的查詢。

如果我有語言的多個領域中的每個文檔像eg.-

([tags - "hello world"] [rank - 2300] [partial tags - "hel", "ell", "llo", "wor", "orl", "rld", "hell", "ello", "worl", "orld"] [english - 1] [Spanish - 0] [French - 0] [German - 0]

我可以在語言領域與排序一起執行MatchScore操作? (每個文件關聯到只有一種語言)

回答

2

Search API是一個很好的服務,遠遠超過數據存儲更適合。如果您的搜索文檔具有正確的語言設置,則搜索API將涵蓋特定語言的特定變體(例如單數/複數)。但搜索API僅適用於單詞(通常由空格,連字符,點等分隔)。

UPDATE:語言被定義或者在一個場的language屬性,或在整個文檔的屬性language。無論哪種情況,該值都是雙字母ISO 693-1語言代碼,例如'de' for German

對於標記搜索條件(「hel」,「elo」,...),您可以使用此答案中的模式:https://stackoverflow.com/a/13171181/1549523 另請參閱我對該答案的評論。當你想使用最少的令牌(例如只有3個字母)來避免存儲大小和前端實例時間時,你可以使用我在那裏鏈接的代碼。

MatchScorer有助於加權的給定項的頻率的文件內。由於標籤通常每個文檔只出現一次,因此無法幫助您。但是,例如,如果您的搜索是關於在研究論文中搜索術語「燃燒」,MatchScorer會對結果進行排名,首先顯示包含最常用術語的論文。

面搜索將增加所謂的面,以返回當前查詢10個最經常發生的面搜索查詢,即(默認)的結果,太。這對標籤或類別有幫助,因此用戶可以通過應用這些建議的過濾器來深入搜索。

如果您想要向用戶推薦拼寫正確的搜索詞,那麼使用兩個索引可能會有意義。一個索引(主索引)用於實際搜索文檔(例如帶有標籤的產品描述),另一個索引僅用於標籤或類別(標記化,最終帶有同義詞)。如果您的用戶輸入搜索字段,您的應用程序將首先查詢標籤索引,並提示匹配標籤。如果用戶選擇其中之一,則標籤用於查詢主要搜索索引。這將幫助用戶選擇正確的標籤。

這些標籤當然可以在數據存儲中進行管理,包括它們的同義詞,如果有人維護這樣的列表。每次存儲標籤時,您的應用都會更新相應的搜索文檔(在二級索引中),包括所有的字符標記(標記)。

+0

我嘗試過3 +和4 +以上的變化,主要是因爲我無法劃分語言。假設我有西班牙語,意大利語,德語,法語和英語用戶。當西班牙語用戶搜索某些內容時,我希望他先看到與他的查詢匹配的西班牙語結果,然後再用英語或其他語言,而不是對西班牙語進行嚴格篩選(如search-api中的「類型」)。有沒有一種方法可以實現MatchScorer隨着對每個文檔可能具有二進制值的語言字段進行排序? – minocha

+0

@minocha我已經注意到你是如何標記字段或文檔的語言的,因爲我注意到你在問題中註釋了你的示例字段。由於我只在我的應用中使用了與語言無關的索引(只有德語受衆),所以我不確定Search API如何處理不同語言的結果,但我相信它的行爲已經是您想要的方式。 AFAIU,Search API會猜測搜索詞的語言,然後應用神奇的語言規則來改進匹配,但我不認爲搜索API只會因爲語言不同而忽略字段或文檔。 – Ani