问题描述
Solr 在托管架构中为不同语言(如英语、法语、日语等)提供了一些现成的数据类型。
我们使用通用数据类型“text_general”进行字段声明,并使用 stopwards.txt 进行停用词过滤。
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EdgeNGramFilterFactory" maxGramSize="20" minGramSize="1"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
<filter class="solr.SynonymGraphFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
在将数据同步到 Solr 核心时,我们正在导入法语、英语、德语蚀刻等领域的不同语言文本。
我的问题是我们是否应该将所有不同语言的停用词使用到同一个“stopwards.txt”文件中,或者 solr 如何使用不同的语言停用词?
解决方法
不要删除停用词。停用词删除是 1970 年代 32 位机器遗留下来的节省磁盘空间的技巧。
我从未删除过停用词,25 年前我开始在 Infoseek 从事搜索工作(该公司并未删除停用词)。
从索引中删除它们会使某些查询变得不可能,例如“维生素 a”。当我在 Netflix 构建搜索时,我不小心离开了停用词删除配置,并发现了一整套 100% 停用词的电影片名。该列表在这篇博文中。
https://observer.wunderwood.org/2007/05/31/do-all-stopword-queries-matter/
像 Solr 这样的 tf.idf 系统中的“idf”分数与停用词的作用相同,但更好。它根据这个特定集合的统计数据给常用词一个较低的分数。
不要删除停用词。