solr - Solr 中的 Edismax 查询对不同的字段使用不同的字符串
问题描述
我可能需要一些关于如何使用 Solr 处理特定跨语言搜索的建议。我有 3 种语言(英语、德语、法语)的文件。为简单起见,我们假设它只是两种语言(英语和德语)。这些文档是标准化的,因为它们包含相同的部分(text_part1 和 text_part2),只是它们编写的语言不同。文件的语言是已知的。在我的索引模式中,我为每种语言使用一个具有不同字段的核心。
对于德语文档,索引将如下所示:
- text_part1_en:空的
- text_part2_en:空的
- text_part1_de:德语文本
- text_part2_de:另一个德语文本
对于英文文档,情况正好相反。
我想要实现的目标:用英语输入查询的用户应该同时收到与其搜索相关的英语和德语文档。进一步的条件是:
- 我希望在 text_part1 和 text_part2 中命中的结果比仅在一个字段中命中的结果排名更高(平局值 > 0)。
- 查询不会是单个词,而是完整的句子(需要删除停用词并且部分命中 [句子中只有几个词] 必须是有效的)。
- 英文和德文文件必须输出到一个等级。我需要能够将英文文档的相关性与德语文档的相关性进行比较。
- 文本部分需要保持分开,我想提高(比如说第 1 部分)的重要性。
到目前为止,我的一般方法是通过将用户查询发送到翻译 API 来获得德语翻译。然后我想使用 edismax 查询,因为它似乎满足了我的所有要求。问题是我无法设法在德语字段中搜索德语查询,而仅在英语字段中搜索英语查询。Solr edismax文档声明它支持完整的 Lucene 查询解析器语法,但我找不到用不同输入处理不同字段的方法。我试过了:
q=text_part1_en: (A sentence in English) text_part1_de: (Ein Satz auf Deutsch) text_part2_en: (A sentence in English) text_part2_de: (Ein Satz auf Deutsch)
qf=text_part1_en text_part2_en text_part1_de text_part2_de
这个语法应该与 MatsLindh 在这个线程中写的一致。我尝试了编写这个 q 的不同版本,但无论我做什么 Solr 总是在 qf 给出的所有四个字段中搜索完整的 q 字符串,这完全弄乱了结果。我只是在查询语法中犯了错误,或者甚至可以使用 edismax 来做我想做的事情吗?
我看到的唯一选择是使用两个单独的 edismax 搜索。一份英文,一份德文。但是我不知道如何组合结果。据我了解,两次不同搜索的分数没有可比性,对吗?
我遇到的关于多语言搜索的来源似乎都与查询的语言未知并需要检测的情况有关,但之后只有查询语言的文档与结果相关。不过,由于缺乏理解,我完全有可能不知道到底要寻找什么。我对使用 Solr 很陌生。任何帮助深表感谢。我正在使用 Solr 8.2.0。
解决方案
推荐阅读
- android - 如何从 AOSP 构建中删除计算器应用程序
- java - 我们可以在三元运算符(Java)中使用命令吗?
- javascript - 页面路由在 Angular 8 中无法正常工作
- python - Lambda python - 标记 EC2 实例的条件
- java - SQLException pg_get_serial_sequence NOT FOUND
- reactjs - 我们如何在 Jest、酶中访问组件 const 变量
- php - 在 woocommerce 购物车和结帐页面中显示变化数组
- python - 使用布尔掩码为 numpy 数组赋值:如何?
- java - 如何测试受保护的 Spring Controller
- javascript - setInterval 求和随机量