首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要帮助对搜索结果进行排序

需要帮助对搜索结果进行排序
EN

Stack Overflow用户
提问于 2009-09-30 21:30:03
回答 2查看 279关注 0票数 1

我在Lucene索引中有3条记录。

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

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

词组#3-因为它包含输入的两个单词在一起(ie.as a a.Record ) b.Record #1 c.Record #2

换句话说,所有关键字的精确匹配应该比单个关键字的匹配具有更大的权重。

我如何在lucene中实现这一点?

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-10-07 05:31:26

你可以像bajafresh4life说的那样使用phrase + slop,但是如果词条之间的距离超过了slop,它将无法匹配任何东西。

一种稍微复杂一点的替代方法是构造一个布尔查询,该查询显式地搜索短语(带或不带slop)和短语中的每个术语。例如。

代码语言:javascript
复制
"healthcare insurance" OR healthcare OR insurance

普通的lucene相关性排序将给你想要的东西,并且不会像“大斜率”方法那样失败。

您还可以提高单个字段的权重,例如,title的权重比description或company name更重。这需要一个更复杂的查询,但让您可以更好地控制排序……

代码语言:javascript
复制
title:"healthcare insurance"^2 OR title:healthcare^2 OR title:insurance^2
OR description:"healthcare insurance" OR ...

获得正确的权重可能是相当棘手的,你可能不得不尝试它们来获得你想要的东西(例如,在我刚刚给出的例子中,你可能不想提升标题的单个术语),但当你让它工作时,这是非常好的:-)

票数 1
EN

Stack Overflow用户

发布于 2009-10-01 14:43:03

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

代码语言:javascript
复制
healthcare insurance

您可以将其重写为:

代码语言:javascript
复制
"healthcare insurance"~100

“医疗保健”和“保险”这两个词接近的文档得分会更高。在这种情况下,由于斜率因子为100,因此具有两个单词但相距超过100个术语的文档将不匹配。

重写查询涉及操作BooleanQuery中的术语对象。获取所有术语,创建一个PhraseQuery,并设置一个斜率因子。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1500762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档