0

在网上搜索和搜索之后,我发现了一个可能的开源解决方案,用于 solr 中的点击计数流行度(=不需要付费版本的清晰工作搜索)。

在接下来的两个答案中,我将尝试以一种简单的方式解决这个问题,但方式有点复杂......

但首先有一些先决条件。

我们假设类似于 google 的场景:
1. 用户将在文本字段中介绍一些术语并按下搜索按钮
2. 系统(与 solr 结合的自定义网络应用程序)将生成一个网页,其结果可点击
3.用户将选择其中一个结果(例如访问详细信息)并通知系统更改所选结果的“受欢迎程度”

4

3 回答 3

1

非常简单的方法。

我们在 solr schema.xml 中定义了一个名为 'popularity' 的字段

<field name="popularity" type="long" indexed="true" stored="true"/>

我们假设用户将点击 id 为1234的文档,因此我们(=webapp)必须调用 solr 以使用 url更新 id 为1234的文档的流行度字段

http://mysolrappserver/solr/update?commit=true

并在正文中张贴

<add>
  <doc>
    <field name="id">**1234**</field>
    <field name="popularity" update="inc">1</field>
  </doc>
</add>

因此,每次 web 应用程序向 solr 查询某些内容时(将 solr 'boost' 字段与我们的自定义 'popularity' 字段组合/排序),我们将获得一个也按受欢迎程度排序的列表

于 2014-04-02T13:39:20.347 回答
0

这是一种有趣的方法,但是我看到了一些缺点:

  1. 每次搜索时,整体项目存储量都会急剧增长。
  2. 您假设选择特定项目是 100% 正确的,并且不是错误的或只是简短的。这样一来,您可能会得到错误的搜索结果。

我建议仅根据用户未单击的其他结果来增加计数器甚至维护相对计数器。

于 2014-08-11T15:54:34.963 回答
0

更复杂的想法是更新 solr 索引,不仅跟踪用户选择,还跟踪用于获取列表的搜索词。

首先,我们必须定义一个历史字段来存储所使用的搜索词:

<field name="searchHistory" type="text_general" stored="true" indexed="true" multiValued="true"/>

然后我们假设用户搜索了“某物”并从结果列表中选择了 id 为1234的文档。webapp 将在 url 调用 solr 实例

 http://mysolrappserver/solr/update?commit=true

向字段 searchHistory 添加新值

<add>
  <doc>
    <field name="id">**1234**</field>
    <field name="searchHistory" update="add">**something**</field>
  </doc>
</add>

最后,在每个后续查询中使用 solr termfreq 函数,我们将获得一个 'score',结合 'boost' 字段可以生成基于点击计数流行度(和搜索词历史)的排序列表。

于 2014-04-02T13:51:44.507 回答