2012-10-04 58 views
2

我正在爲Lucene.net編寫一個搜索引擎,用於大約200萬種產品的數據庫。我使用的是Snowball Analyzer,到目前爲止,我對性能和結果集印象深刻。Lucene:檢測缺失空間

我似乎無法克服的一個問題是檢測到搜索輸入中缺失的空格。

例如:

用戶正在尋找「黑鑽石」品牌的產品,但他們搜索「黑鑽」。

由於雪球分析儀創造了黑鑽兩個獨立Tokens我得到結果。

我可以採取什麼方法來糾正這個問題?我看了一下Shingle Analyzer(n-gram),但不知道這是否有幫助。

是否有可能將Shingle AnalyzerSpellChecker(並且這是一個效果解決方案)?這將是想法,如果我可以提示人們你是否意指:「黑鑽石」?發生此情況時的鏈接。

+1

看看lucene 4.0 WordBreakSpellChecker https://issues.apache.org/jira/browse/LUCENE-3523。如果它很容易移植它,這將是一個簡單的解決方案 –

+0

我會試一試。我敢打賭,它有4.0 tho其他依賴項。我正在運行3.0,但也許我可以複製這個概念。謝謝 – NSjonas

回答

0

如果最初運行用戶查詢,如果沒有結果(或得分低於某個閾值),則運行N個附加搜索(其中N是將單詞分成兩部分的可能性數),顯示用戶結果的可能性得到最高分。

+0

我不認爲這會工作得很好,主要是由於數據集非常大。如果我理解正確的話,可以在每個可能的索引處分割這個詞。所以第一次迭代會產生令牌:'b'和'lackdiamond'。他們是單字母b的產品,因此會返回無效結果。我真的需要一種方法來爲帶有空格的短語創建一個標記並與它們匹配。 – NSjonas

+1

我正在考慮運行'b'*和*'lackdiamond',這很可能不會返回任何內容,而第五次迭代:'black'和'diamond'選項預計會返回結果。但是,誰說你想限制用戶開始使用連接,所以我想我的建議是一個更平庸的黑客,以防你不想投資一個專門的拼寫檢查解決方案。我立場糾正。謝謝。 –