我有 3 个文本字段:
- content_en
- content_sp
- content_fr
上述每个字段都有自己的一组分析器、标记器和过滤器。他们也有自己的一组停用词。
我使用 LangIdentifierProcessor ( https://cwiki.apache.org/confluence/display/solr/Detecting+Languages+During+Indexing ) 来确定索引文档的语言,Solr 会将该文档的内容写入正确的字段。
最后,我使用 eDisMax 解析器处理查询。我的 qf 参数映射到上面的 3 个字段,并且 mm 参数设置为 100%。
这是我的问题:当我使用“Yellow House”查询进行搜索时,Solr 将返回所有带有Yellow和House术语的文档。伟大的。现在,当我用“黄房子”查询时,我不会得到任何回报。经过一段时间的调试,我发现Solr为'The Yellow House'构造了一个类似于以下的查询: +( (content_sp:the | content_fr:the) (content_en:yellow | content_sp:yellow | content_fr:yellow)( content_en:house | content_sp:house | content_fr:house))
请记住,我将 mm 设置为 100%,这意味着必须在要返回的文档中找到所有术语。由于术语“the”是我的英语字段的停用词,因此 Solr 不会将其包含在针对 content_en 字段的查询中,但它确实将其包含在我的其他两个字段的查询中,这显然会失败,因为这些字段赢了里面没有任何英文文件。(由于上面链接中解释的 LangIdProcessor)。
现在 - 作为一个快速修复,我想我可以将所有停用词列出到一个文件中,但是这是错误的。我也知道我可以为每个查询指定我的 qf 字段,这将允许我检测查询语言,然后指定要搜索的字段。但是我可以在 Solr 中做些什么来指定这个(可能是某种 SearchComponent)吗?还是我的多语言方法不正确?