eDismax使用停用词和特定语言字段进行查询

时间:2015-06-18 21:18:25

标签: apache solr multilingual stop-words edismax

我有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%。

以下是我的问题:当我搜索'黄屋'时,Solr将返回所有包含黄色 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%,这意味着必须在要返回的文档中找到所有术语。由于术语“'是我的英语字段的禁用词,Solr没有将它包含在针对content_en字段的查询中,但 将其包含在我的其他两个字段的查询中,这显然会失败,因为这些字段在英文文档中没有任何内容。 (由于上面的链接中解释了LangIdProcessor。)

现在 - 作为一个快速修复,我想我可以将所有的停用词列入单个文件,但这是错误的。我也知道我可以为每个查询指定我的qf字段,这将允许我检测查询语言,然后指定要搜索的字段。但我可以在Solr中做一些事情来指定它(可能是某种SearchComponent)吗?或者我的多语言方法不正确?

1 个答案:

答案 0 :(得分:1)

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

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

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