2014-06-05 66 views
1

起初,我使用的是analizer「語言分析器」,一切似乎都很好。直到我意識到「a」不是法語中的停用詞列表的一部分添加elision過濾器到雪球

所以我決定用雪球測試。它也似乎工作得很好,但在這種情況下,它確實刪除了像「l」,「d」這樣的短字,...

因此,我的問題:如何使用雪球,默認保留過濾器,停用詞和精簡列表?

否則,如何更改analizer「語言分析器」的停用詞表?

還有最後一個問題:真的有興趣使用雪球而不是分析器「語言分析器」嗎?它快嗎?更相關?

謝謝

回答

1

由於分析儀僅僅是一個標記和零個或多個過濾器的組合,你可以建立自己的自定義雪球分析儀,它模仿了「默認」,並增加了在上面自己的過濾器,如elision token filter

如在規定的snowball analyzer documentation

類型雪球的分析儀,其使用標準標記生成器,與標準濾波器小寫過濾阻濾波器,和雪球濾波器

所以這裏是一個包含兩個實現,一個雪球分析儀默認篩選器加定製停用詞和省音和蒙山停用詞自定義列表語言分析的例子:

{ 
    "settings": { 
    "analysis": { 
     "analyzer": { 
     "custom_snowball_analyzer": { 
      "tokenizer": "standard", 
      "filter": [ 
      "standard", 
      "lowercase", 
      "stop", 
      "snowball", 
      "custom_stop", 
      "custom_elision" 
      ] 
     }, 
     "custom_language_analyzer": { 
      "type": "french", 
      "stopwords": ["a", "à", "t"] 
     } 
     }, 
     "filter": { 
     "custom_stop": { 
      "type": "stop", 
      "stopwords": ["a", "à", "t"] 
     }, 
     "custom_elision": { 
      "type": "elision", 
      "articles": ["l", "m", "t", "qu", "n", "s", "j"] 
     } 
     } 
    } 
    } 
} 

讓我們看看這兩個分析器生成的令牌,使用相同的測試語句:

curl -sXGET 'http://localhost:9200/testing/_analyze?analyzer=custom_snowball_analyzer&pretty' -d "Il a de la chance, parait-t-il que l'amour est dans le pré, mais au final à quoi bon ?." | grep token 
    "tokens" : [ { 
    "token" : "il", 
    "token" : "de", 
    "token" : "la", 
    "token" : "chanc", 
    "token" : "parait", 
    "token" : "il", 
    "token" : "que", 
    "token" : "amour", 
    "token" : "est", 
    "token" : "dan", 
    "token" : "le", 
    "token" : "pré", 
    "token" : "mai", 
    "token" : "au", 
    "token" : "final", 
    "token" : "quoi", 
    "token" : "bon", 

curl -sXGET 'http://localhost:9200/testing/_analyze?analyzer=custom_language_analyzer&pretty' -d "Il a de la chance, parait-t-il que l'amour est dans le pré, mais au final à quoi bon ?." | grep token 
    "tokens" : [ { 
    "token" : "il", 
    "token" : "de", 
    "token" : "la", 
    "token" : "chanc", 
    "token" : "parait", 
    "token" : "il", 
    "token" : "que", 
    "token" : "amou", 
    "token" : "est", 
    "token" : "dan", 
    "token" : "le", 
    "token" : "pré", 
    "token" : "mai", 
    "token" : "au", 
    "token" : "final", 
    "token" : "quoi", 
    "token" : "bon", 

正如你所看到的,兩個分析儀都能產生幾乎完全相同的標記,除了「amour」,我還不知道爲什麼說實話,因爲雪球過濾器在引擎蓋下使用了stemmer。

關於你的第二個問題,那些過濾器隻影響索引時間(在標記化步驟中),我會說這兩個實現的性能幾乎相等(語言分析器應該稍微快一些,因爲它在本例中僅干擾法語單詞) 除非您計劃在重負載下編制大量文檔,否則不會引人注目。

搜索響應時間應該是相似的,因爲標記是差不多相同(如果您僅索引法語文檔),所以我認爲Lucene會提供相同的性能。

總結一下,如果您只是索引法語文檔,我會選擇語言分析器,因爲它在映射定義中要小得多:-)