2012-04-02 59 views
2

這需要一些解釋,但我認爲這個討論可以幫助任何人在Solr索引中使用重要短語。整理短語拼寫檢查結果Solr

我正在使用Solr在電子商務環境中進行搜索,並試圖改進品牌名稱的拼寫檢查建議。默認情況下,Solr會單獨檢查每個單詞,而不考慮結果詞組是否有意義。例如,搜索「paula dean」會帶回「您的意思是:paula bean?」,而品牌名稱實際上是「Paula Deen」。目前,我的拼寫字典是一個名爲spellField的空白標記字段。爲了爲拼寫檢查指定完整的品牌名稱,我從我的數據庫的品牌名稱中使用我的Solr導入替換空格,即下劃線,即Entree Casual Dining - > Entree_Casual_Dining。下面是spellField的字段類型的模式:

<fieldType name="spellcheckquery" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.PatternReplaceFilterFactory" pattern="(\s[0-9]+\s)|(^[0-9]+\s)|(\s[0-9]+$)|(^[0-9]+$)" replacement="" replace="all"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.PatternReplaceFilterFactory" pattern="(\s[0-9]+\s)|(^[0-9]+\s)|(\s[0-9]+$)|(^[0-9]+$)" replacement="" replace="all"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.ShingleFilterFactory" minShingleSize="2" maxShingleSize="4" outputUnigrams="true"/> 
    </analyzer> 
</fieldType> 

把下劃線的品牌名稱是我能想到的,以保持多字的品牌視爲單個標記的空白標記化領域的最佳途徑。在返回後,我可以輕鬆地刪除下劃線的返回拼寫建議。因此,現在,當查詢進入時,Solr對查詢進行了細化處理,併爲每個拼圖尋找拼寫建議,即搜索拼寫錯誤的品牌:「entre casual dining」 - >「entre」,「casual」,「餐飲「,」休閒娛樂「,」休閒餐飲「,」休閒餐飲「。 「entre_casual_dining」這個牌子的「entre_casual_dining」類似於索引中的內容(「Entree_Casual_Dining」),因此建議。大。

假設查詢包含品牌名稱和產品類型,如「entre casual dining table set」。我們希望找到品牌名稱的拼寫更正並替換整個拼寫錯誤的品牌以返回「entree_casual_dining表格集」建議。我認爲Solr的整理功能可以很好地處理這個問題。當我進入這個搜索,不過,Solr的找到正確的品牌的建議,但它不整理它放回結果:

<response> 
    <lst name="responseHeader"> 
    <int name="status">0</int> 
    <int name="QTime">48</int> 
    </lst> 
    <result name="response" numFound="100" start="0"/> 
    <lst name="spellcheck"> 
    <lst name="suggestions"> 
     **<lst name="entre casual dining">** 
     <int name="numFound">1</int> 
     <int name="startOffset">0</int> 
     <int name="endOffset">19</int> 
     <int name="origFreq">0</int> 
     <arr name="suggestion"> 
      <lst> 
      **<str name="word">entree_casual_dining</str>** 
      <int name="freq">21</int> 
      </lst> 
     </arr> 
     </lst> 
     <bool name="correctlySpelled">false</bool> 
     **<str name="collation">entre casual dining table set</str>** 
    </lst> 
    </lst> 
</response> 

它有沒有問題整理時校正從一個單一的拼寫錯誤的單詞查詢出來。例如,如果拼錯「表」,它會將它整理回查詢中。

當它試圖整理來自多字詞拼圖的建議時會發生什麼問題?

回答

0

我已經看到solr成功整理了關於多詞關鍵詞的建議,沒有任何問題。我曾經使用過Solr 3.1。我遇到的一個問題是多字詞關鍵字中的多個單詞拼寫錯誤,並且有來自solr的建議,然後拼寫檢查程序提供了多個組合,這些拼寫檢查程序在打開「整理」時會出現 - 因此,當它變得更加棘手時。

即使在您的場景中使用「_」,我認爲它可能會變得複雜,這取決於單詞拼寫錯誤的程度,因爲它會將「_」也視爲單詞的一部分,並將其用於計算。只是想知道它的工作是否像你期望的那樣工作,因爲木瓦廠也會產生破碎的木瓦。

+0

確實,有一些意想不到的行爲。你認爲有什麼方法可以在我的拼寫檢查字段中放置完整的品牌名稱標記,而該字段中的其他條款是用空格標記的?你能舉出一個Solr整理多詞關鍵詞的例子嗎?感謝您的答覆! – 2012-04-03 13:31:42

1

我會考慮改變你的分析看起來更像這樣:

<analyzer type="index"> 
    <tokenizer class="solr.KeywordTokenizerFactory"/> 
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1" preserveOriginal="1" /> 
    <filter class="solr.LowerCaseFilterFactory"/> 
</analyzer> 
<analyzer type="query"> 
    <tokenizer class="solr.KeywordTokenizerFactory"/> 
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1" preserveOriginal="0" /> 
    <filter class="solr.LowerCaseFilterFactory"/> 
</analyzer>  

通過preserveOriginal設置爲1,將令牌化的品牌名稱既是個人的話,並作爲一個大標誌。另外,我相信Shingle的東西已經被棄用,並預定在4.0版本中刪除。