0

我的 SME 有一条关于 SOLR 搜索相关性的规则。它是这样的。

当“XX”、“YY”或“ZZ”出现在用户的搜索词中时,大幅提升结果中的文档类型“MMMM”。(但只有那时,这意味着我不能对我认为的文档本身进行加权。)

我可以想象构建一个“查询预处理器”来检查指定术语“XX”等的存在,然后将它们插入到一个预先构建的查询中,从而大大提升 document_type “MMMM”。

这对我来说感觉有点笨拙。在代码中执行此操作并处理来自两个规则的术语在搜索中的“联合”情况听起来不像我想要维护的东西。

我想知道是否有办法利用 SOLR 来做到这一点?首先想到的是在预处理数据以进入 SOLR 时,将那些特定的搜索词“XX”等放入任何文档类型“MMMM”中。

只是将它们扔到文档的文本中可能不会改变太多的权重 - 特别是如果该术语在其他文档中不是该文档类型的一部分 - 在我看来,这表明所有文档上都有一个“important_abbreviations”字段和在所有查询中包含对该通用字段的提升的“标准”做法。我这么说是因为我不记得曾经见过一种方法来提升文档中的特定字段,除非在查询中。

我想知道是否还有其他人解决了这个问题,如果是,如何解决——因为这两个对我来说都感觉有点笨拙。

4

1 回答 1

0

尝试一个可能的答案:请随时批评、建议或警告。

(我知道“缩写”字段感觉有点像同义词,如果您认为同义词是解决这个问题的更好方法,请发表评论。)

第 1 步:在 SOLR 中对所有集合文档创建一个“缩写”多值字段。

第 2 步:当我构建 solrInputDocument 以发送到 SOLR 时,将“XX”、“YY”、“ZZ”添加到“MMMM”类型的所有文档中。

第 3 步:在第 2 步中添加缩写时增加“缩写”字段,以便生成的 xml 如下所示:

<field name="abbreviation" boost="5.0">myXXAbbreviationGoesHere</field>

[关注:我可以提升一些“缩写”类型的字段而不是其他字段吗?换句话说,SOLR 是否会尊重/正确计算字段提升值,如果它在一个文档上为“2”,在另一个文档上为“5”并且在第三个文档上没有提升?]

第 4 步:执行 copyField 并将“缩写”放入默认的“文本”搜索字段。[这可能会让我失去特定领域的权重,是吗?-- 因此下面有 5 或 6 个。]

第 5 步:或者 - 添加一个请求处理程序,强制在每次传入搜索时直接在缩写字段上进行搜索。对此并不完全确定,但我从这个stackoverflow问题中得到了这个想法:Solr - Boosting result if query is found in a special field

第 6 步:或者 - 在我的 UI 中输入的每个查询上附加用于搜索“缩写”的查询文本 - 在提交给 SOLR 之前。

[在这种情况下,我想用这个单一的查询搜索默认字段和“缩写”字段。我认为这是可能的,我只是还没有尝试编写查询。感激地接受评论。]

于 2016-01-08T18:18:52.813 回答