2012-02-01 35 views
4

例如,假设我的数据库中有一条记录,其文本为"Hormel Corporation",我的搜索项像"Hormel Corned Beef 16 Ounces"。正如我目前的配置,最好的结果将是其他记录,即使"Hormel Corporation"是我正在寻找的。我认为解决我的问题的办法是优先考虑搜索词最早出现匹配的记录。我已经阅读了所有的文档,但是我很难弄清楚这可能如何工作。太阳黑子 - 提升记录,在文本的早期匹配发生

我只有一个字段名。我想要的记录名字是“Hormel Corporation”,但是当我搜索“Hormel Corned Beef 16盎司”时,最好的结果是ISNT“Hormel Corporation”,但是看起来是随机的,而我的记录寻找的结果是第三或第四。

非常感谢!

回答

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. 确定每场的权重为您查询

当你搜索“荷美尔咸牛肉16盎司”,因此,其标题为“荷美尔公司”将比分更好,其体内含有”的文件...对于我们推荐一罐荷美尔咸牛肉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个单词将对给定的搜索产生更大的影响。

+0

这是有道理的,但我只有在我的数据库中存储的价值“荷美尔公司”。当用户搜索时,术语“荷尔蒙咸牛肉16盎司”不会储存在我的数据库的任何地方。但我想与荷美尔公司匹配。问题是,结果中看似无关的记录出现在“荷美尔公司”之前。 – 2012-02-02 07:36:02

+0

我编辑了最后一句,以便更好地理解。它不应该暗示查询将被存储在任何地方:-)我正在处理“看似无关的记录”,请指出我需要进一步澄清的任何内容 – aitchnyu 2012-02-02 07:53:43

+0

嗯,我认为我的问题可能不够清楚。我只有一个字段名称。我想要的记录名字是“Hormel Corporation”,但是当我搜索“Hormel Corned Beef 16盎司”时,我的最高成绩是ISNT“Hormel Corporation”,但是看起来随机的东西,在寻找的结果是第三或第四。 – 2012-02-02 18:43:05

0

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

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

不,我没有,我不知道这是有效的语法。该短语中的每个单词都需要提升值吗? – 2012-02-02 01:45:47

+0

我没有任何成功与这 – 2012-02-02 04:30:27