2013-10-31 38 views
3

我想查詢wi-fi在索引中匹配文檔wifi。所以,我使用solr.WordDelimiterFilterFactory以鏈狀單詞查詢:Solr WordDelimiterFilter在查詢中生成單詞部分和鏈接

<fieldType name="text" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="query"> 
     <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
     <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="1" splitOnCaseChange="1" splitOnNumerics="1" stemEnglishPossessive="0" preserveOriginal="0"/> 
     <filter class="solr.ICUFoldingFilterFactory"/> 
    </analyzer> 
    <analyzer type="index"> 
     <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
     <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="1" splitOnCaseChange="1" splitOnNumerics="1" stemEnglishPossessive="0" preserveOriginal="0"/> 
     <filter class="solr.ICUFoldingFilterFactory"/> 
    </analyzer> 
</fieldType> 

但是使用這個配置查詢LGA1155不匹配LGA 1155,因爲查詢標題:LGA1155解析如:(標題:標題LGA 1155標題:LGA1155)〜3

如果我不鏈狀的查詢詞,LGA1155匹配LGA 1155,因爲查詢被解析爲:(標題:lga標題:1155)〜2。但隨後wi-fi不匹配wifi

我使用edismax查詢分析器和q.op。 Solr版本:4.5。

那麼,怎樣才能使雙方無線比賽無線LGA1155比賽LGA 1155(及其他類似查詢)?

回答

7

正如你所描述的那樣,你想鏈接單詞部分,但你想分裂數字。

catenateAll="1"你有沒有好,因爲這將撤消NUMERICS的分裂(LGA115成爲LGA 1155)你想達到的。

在分析儀中使用WhitespaceTokenizerFactory的這些設置進行試驗。

<fieldType name="text" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer> 
     <tokenizer class="solr.WhitespaceTokenizerFactory" /> 
     <filter class="solr.WordDelimiterFilterFactory" 
      generateWordParts="0" catenateWords="1" 
      generateNumberParts="1" catenateNumbers="0" splitOnNumerics="1" 
      catenateAll="0" splitOnCaseChange="0" 
      stemEnglishPossessive="0" preserveOriginal="0" /> 
     <filter class="solr.ICUFoldingFilterFactory" /> 
    </analyzer> 
</fieldType> 

這將產生下面的令牌

  • 的Wi-Fi - >wifi
  • 無線網絡 - >wifi
  • 無線網絡 - >wifi
  • LGA1155 - >lga
  • 1155
  • LGA 1155 - >lga1155
  • LGA1155 - >lga1155

正如你所看到的WiFi變成一個字,LGA1155被分離。


另一件事是,你可以在我的樣本中所看到的,如果在查詢和索引時間分析儀應是相同的,因爲你的樣品中,你可以離開了在analyzer元素的type屬性和刪除這兩個元素之一完全。

所以不是

<fieldType ... > 
    <analyzer type="query"> 
     <!-- same stuff --> 
    </analyzer> 
    <analyzer type="index"> 
     <!-- same stuff --> 
    </analyzer> 
</fieldType> 

只是

<fieldType ... > 
    <analyzer> 
     <!-- will be taken to index and query time --> 
    </analyzer> 
</fieldType> 
+0

謝謝您的回答。 ICUFoldingFilterFactory執行LowerCaseFilterFactory的工作。 – Rinas

+0

良好的提示,我沒有ICU運行,並沒有對此感到舒服。我已經從google的答案中刪除了提示。 – cheffe