我有 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将返回所有带有术语"黄色"和"房屋"的文档。伟大。现在,当我查询"黄房子"时,我不会得到任何回复。调试一段时间后,我发现 Solr 为"黄房子"构造了一个类似于以下内容的查询:+((content_sp:
the | content_fr:the)(content_en:黄色 | content_sp:黄色 | content_fr:黄色)(content_en:房子 | content_sp:房子 | content_fr:房子))请记住,我将 mm 设置为 100%,这意味着必须在要返回的文档中找到所有术语。由于术语"the"是我的英语字段的停用词,因此 Solr 不会将其包含在针对content_en字段的查询中,但它确实将其包含在我的其他两个字段的查询中,这显然会失败,因为这些字段对于英语文档没有任何内容。(由于上面链接中解释的 LangIdProcessor)。
现在 - 作为快速修复,我想我可以将所有停用词列出到一个文件中,但这是错误的。我还知道我可以为每个查询指定我的 qf 字段,这将允许我检测查询语言,然后指定要搜索的字段。但是我可以在 Solr 中做一些事情来指定这个(也许是某种搜索组件)吗?还是我的多语言方法不正确?
的问题:https://issues.apache.org/jira/browse/SOLR-3085
似乎没有明确的解决方法,所以我将把我所有的停用词合并在一起。(这可能会导致小问题,但与空结果集相比,这是一个很大的改进)。
mm.autoRelax方法看起来很有前途,但是它目前没有在Solr 4.10中实现(我知道我落后了)。