需要帮助订购搜索结果

时间:2009-09-30 21:30:03

标签: lucene lucene.net

我在Lucene指数中有3条记录。

记录1包含标题字段中的医疗保健。 记录2包含描述字段中的医疗保险和保险,但不在一起。 记录3包含公司名称字段中的医疗保险。

当用户搜索医疗保险时,我想在搜索结果中按以下顺序显示记录...

a.Record#3 ---因为它包含输入的两个单词(即一个短语) b。记录#1 c。记录#2

换句话说,所有关键字的完全匹配应该比单个关键字的匹配更重要。

我如何在lucene中实现这一目标?

感谢。

2 个答案:

答案 0 :(得分:1)

使用短语+ slop因子重写查询。因此,如果查询是:

healthcare insurance

您可以将其重写为:

"healthcare insurance"~100

将“医疗保健”和“保险”更接近彼此的文件得分更高。在这种情况下,由于slop因子为100,所以同时包含两个单词但超过100个术语的文档将不匹配。

重写查询涉及操纵BooleanQuery中的Term对象。完成所有条款,创建PhraseQuery,然后设置一个slop因子。

答案 1 :(得分:1)

你可以使用短语+ slop作为bajafresh4life说,但是如果这些术语超过slop,它将无法匹配。

稍微复杂的替代方法是构造一个布尔查询,明确搜索短语(有或没有slop)和短语中的每个术语。 E.g。

"healthcare insurance" OR healthcare OR insurance

正常的lucene相关性排序将为您提供您想要的,并且不会以“大倾斜”方式的方式失败。

您还可以提升单个字段,例如,标题的加权比描述或公司名称更重要。这需要一个更复杂的查询,但可以让您更好地控制订购......

title:"healthcare insurance"^2 OR title:healthcare^2 OR title:insurance^2
OR description:"healthcare insurance" OR ...

权衡权利可能相当棘手,你可能不得不玩弄它们来得到你想要的东西(例如我刚给出的例子,你可能不想提高标题的个别条款) ,但是当你使它工作时,它非常好: - )