我想在搜索(solr)中实现点击相关性排名。基本上根据用户的反馈(即点击),我们想要改变搜索结果的顺序。以下是我的方法。
我们将向文档添加一个新字段,以索引已访问(或单击)结果/文档的查询。每当单击结果时,我们将更新索引以包含已单击结果的查询。我们将使用 solr 的部分更新将新查询添加到索引中。因为,我们也使用索引作为我们的数据存储,所以我们所有的字段都被存储了,我可以再存储一个字段。
这是实现此功能的正确方法吗?
注意:我还必须评估日志记录,并且(还)远离实现它。我刚开始构建一个需求规范,我制定了它。
如下。
Evaluate user selection (Click through) for `query` and matched result position.
位置很重要,因为它决定了相关性。
我选择排名靠前的结果为 3。(假设N=3
)。
N>3
,那么增加查询的结果提升是很重要的。N<=3
,我们很好。N<=3
,则将排名靠前的结果降级(也许?)但是,我们可能会在这里得到很多错误的信息。假设,一个用户发疯了,点击了完全不相关的结果。
因此,我们需要监控使用情况,甚至记录用户事件,而不仅仅是基本位置并单击以覆盖它。
所以,日志需要打开:
{user-login|session}
。{Query + Filters + Facets}
。{did you mean... | autocomplete}
点击事件的特殊标志,带有{TimeStamp + Location}
如果大量独立用户表示在某个时间范围(几个月)内点击了低分文档,我会根据位置提升文档。
由于我们甚至关联了一个用户会话(登录),我也许可以根据用户映射结果(如果用户产生不相关的噪音,请将其发回给他;P)。
但是,我会尽量不要过度推动。搜索可能看起来被篡改。
此外,用户填写的反馈表可能是一个好主意,可以了解您的进展情况。