我有3个文字字段:
上述每个字段都有自己的分析器,标记器和过滤器。他们也有自己的一组停用词。
我使用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)吗?或者我的多语言方法不正确?
答案 0 :(得分:1)
这是我的问题:https://issues.apache.org/jira/browse/SOLR-3085
似乎没有明确的解决方法,所以我将把所有的停用词合并在一起。 (这可能会导致一些小问题,但它与空结果集相比有很大改进。)
mm.autoRelax方法看起来很有希望,但目前Solr 4.10中没有实现(我知道我已经落后了)。