例如,假设我的数据库中有一条记录包含文本 "Hormel Corporation" 并且我的搜索词类似于 "Hormel Corned Beef 16 Ounces" 。就我目前的配置而言,即使 "Hormel Corporation" 是我正在寻找的记录,最高的结果也将是其他记录。我认为我的问题的解决方案是优先考虑在搜索词中最早出现匹配的记录。我已经阅读了所有文档,但我无法弄清楚这可能是如何工作的。

我只有一个字段——名字。我想要的记录的名称字段显示为“Hormel Corporation”,但是当我搜索“Hormel Corned Beef 16 Ounces”时,最上面的结果是 ISNT “Hormel Corporation”,但似乎是随机的,而我的记录寻找是结果中的第 3 或第 4 位。

非常感谢!

最佳答案

我有一个类似的问题要解决。所以我将我的数据存储在许多字段中:

title
keywords (upto 10 words)
abstract (a paragraph)
text (as long as you like)

对于查询,我在不同权重的字段上使用了 dismax 查询解析器:
title^20
keywords^20
abstract^12
text^1

所以如果你
  • 很好地定义您的数据模式
  • 使用 dismax
  • 为您的查询确定每个字段的权重

  • 当您搜索“Hormel Corned Beef 16 Ounces”时,标题为“Hormel Corp”的结果对正文包含“...对于这道菜,我们推荐一 jar Hormel Corned Beef 16 Ounces...”的文档得分更高。

    编辑 OP 的评论。

    OP 的事实是:给定 n 个单词的标题, 前 n 个单词比其他单词更重要

    我建议一个数据模型,其中有两个字段: title_first_wordstitle 。客户端应用程序(抱歉,您不能直接使用 DIH)将不得不 从 title 中提取前 n 个单词 以存储到 title_first_words 中,并将完整的 title 存储到 title

    对于搜索,您可以将整个查询提供给 dismax 解析器。查询解析器像 title_first_words 一样偏向于 title_first_words^4 title^1 。因此,前 n 个词将对给定的搜索产生更大的影响。

    关于ruby-on-rails - Sunspot -- Boost 记录出现在文本早期的匹配项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9101478/

    10-10 11:55