0

我有 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 将返回所有带有YellowHouse术语的文档。伟大的。现在,当我用“黄房子”查询时,我不会得到任何回报。经过一段时间的调试,我发现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)吗?还是我的多语言方法不正确?

4

1 回答 1

1

这是我的问题:https ://issues.apache.org/jira/browse/SOLR-3085

似乎没有明确的解决方法,所以我将把我所有的停用词合并在一起。(这可能会导致一些小问题,但与空结果集相比这是一个很大的改进)。

mm.autoRelax 方法看起来很有希望,但是它目前还没有在 Solr 4.10 中实现(我知道我落后了)。

于 2015-06-23T15:13:58.280 回答