太阳黑子 - 提升文本中早期匹配发生的记录

时间:2012-02-01 18:51:14

标签: ruby-on-rails solr sunspot sunspot-rails sunspot-solr

例如,假设我的数据库中有一条记录为"Hormel Corporation"且我的搜索字词类似于"Hormel Corned Beef 16 Ounces"的记录。正如我当前的配置所示,顶部结果将是其他记录,即使"Hormel Corporation"是我正在寻找的那个。我认为我的问题的解决方案是优先考虑匹配在搜索词中最早的记录。我已经阅读了所有文档,但是我无法弄清楚这可能会如何起作用。

我只有一个字段 - 名字。我想要的记录的名称字段是“荷美尔公司”,但是当我搜索“荷美尔腌牛肉16盎司”时,最好的结果是ISNT“荷美尔公司”的东西,但看似随机的东西,而我的记录寻找结果中的第3或第4位。

非常感谢!

2 个答案:

答案 0 :(得分:5)

我遇到了类似的问题需要解决。所以我将数据存储在许多领域:

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

对于查询,我在具有不同权重的字段上使用了dismax查询解析器:

title^20
keywords^20
abstract^12
text^1

所以,如果你

  1. 很好地定义您的数据模式
  2. 使用dismax
  3. 确定查询的每个字段的权重
  4. 当您搜索“Hormel Corned Beef 16 Ounces”时,标题为“Hormel Corp”的结果将获得更好的文件,其主体包含“......对于这道菜,我们推荐一罐Hormel Corned牛肉16盎司。 ..“


    编辑OP的评论。

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

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

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

答案 1 :(得分:0)

您是否尝试过提高搜索字词中每个单词的重要性,如:

Hormel^100 Corned^20 Beef^5 16^2 Ounces^1