起初,我使用的是分析器“语言分析器”,一切似乎都运行良好。直到我意识到“a”不是法语停用词列表的一部分
所以我决定用雪球来测试。它似乎也运行良好,但在这种情况下,它确实删除了像“l'”、“d'”这样的短词......
因此我的问题是:如何使用雪球,默认保留过滤器,并添加停用词和省略号列表?
否则,如何更改分析器“语言分析器”的停用词列表?
最后一个问题:真的有兴趣使用雪球而不是分析器“语言分析器”吗?它更快吗?更相关?
谢谢你
起初,我使用的是分析器“语言分析器”,一切似乎都运行良好。直到我意识到“a”不是法语停用词列表的一部分
所以我决定用雪球来测试。它似乎也运行良好,但在这种情况下,它确实删除了像“l'”、“d'”这样的短词......
因此我的问题是:如何使用雪球,默认保留过滤器,并添加停用词和省略号列表?
否则,如何更改分析器“语言分析器”的停用词列表?
最后一个问题:真的有兴趣使用雪球而不是分析器“语言分析器”吗?它更快吗?更相关?
谢谢你
由于分析器只是标记器和零个或多个过滤器的组合,因此您可以构建自己的自定义雪球分析器,它模仿“默认值”并在顶部添加您自己的过滤器,例如省略标记过滤器。
如雪球分析仪文档中所述:
雪球类型的分析器,它使用标准标记器,带有标准过滤器、小写过滤器、停止过滤器和雪球过滤器。
所以这里是一个包含两种实现的示例,一个带有默认过滤器的雪球分析器加上自定义停用词和省略,以及一个带有自定义停用词列表的语言分析器:
{
"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",它没有被阻止,我不知道为什么说实话,因为雪球过滤器在引擎盖下使用了一个词干分析器。
关于您的第二个问题,这些过滤器仅影响索引时间(在标记化步骤期间),我会说两种实现几乎相同(语言分析器应该稍微快一些,因为它在这个例子中只包含法语单词)并且不会除非您计划在重负载下索引大量文档,否则很明显。
搜索响应时间应该相似,因为令牌几乎相同(如果您仅索引法语文档),所以我认为 Lucene 将提供相同的性能。
总而言之,如果您只索引法语文档,我会选择语言分析器,因为它在映射定义中要小得多:-)