顺序浏览弹性搜索索引

时间:2014-06-16 04:29:03

标签: elasticsearch

我正在构建一个使用Elasticsearch来存储和检索库目录数据的系统。我被要求的一件事是浏览界面。

以下是对此的定义:

  • 用户进行搜索,例如“作者开始时”和他们 供应“史密斯”
  • 系统将它们置于作者列表的中间位置或附近 第一个以“史密斯”开头的位置,所以他们可能 见:
    Smart, Murray
    Smart, Murray J.
    Smeaton, Duncan
    Smieliauskas, Wally
    Smillie, John
    Smith Milway, Katie <-- this being the first actual search result
    Smith, A. M. C.
    Smith, Andrew
    Smith, Andrew M. C.
    etc.
  • 带有标记的那个是实际搜索到的那个,但你可以根据排序顺序看到它周围的那些,包括那些实际上与查询不匹配的那些。
  • 这些将被分页,因此每页大约有20个结果。如果用户返回页面,他们将朝向字母表的开头,如果他们向前翻页,他们将继续前进。
  • 显示的每个结果都会有一个计数,显示有多少结果(即目录项)与该作者相关联。
  • 点击一个结果会把你带到那个作者的所有东西(这个和它之外的一切都相当容易,而且大部分已经实现了。)

我想知道是否有人对如何处理这个有任何好的想法。在这个阶段,我并不太关心处理那些不是“字段开始”搜索的搜索,因为目前正在进行的搜索到底是什么,我会在时机成熟时处理它。

这就是我的想法,但它存在严重问题:

  • 将要浏览的所有字段都是分面的
  • 我得到该字段的所有方面的列表,搜索它以找到起点,并在代码中手动处理分页。
  • 这有一个很大的问题,即我可能会获取数十万个术语并对其进行处理,这不会很快。

  • 回想起来,将所有值加载到自己的索引中并按排序顺序获取所有值都没有什么不同。

我对这里的任何选项持开放态度,无论我是否可以以某种方式跳入查询“from”字段的大量方面的中间,或者我是否应该将所有内容放入另一个专门用于此目的的索引中(尽管我不知道我是如何构建和查询它的,或其他什么。

从我所看到的,我理想的解决方案是我可以指定facet字段,告诉ES我想从以“Smith”开头的那个开始,然后从那里显示,然后我有能够说“回20”,但我不确定这是可能的。

你可以在这里看到我正在谈论的那种事情的例子:http://hollisclassic.harvard.edu/ - 把史密斯称为“作者(姓氏第一)”,它给你一个(非常丑陋的样子) )浏览列表。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

在:

  

带标记的那个是实际搜索过的那个,但你可以   根据排序顺序查看周围的那些,包括那些   实际上并不匹配查询。

我有类似的要求:“向用户显示如果搜索条件更放松,我们会找到多少记录”。 我通过做两次搜索(一次精确,一次更放松)来解决这个问题,因为ES的性能非常好,以至于进行一两次搜索并不重要。时间在显示(在我的情况下)中被吃掉而不在搜索中。

您仍然需要在应用程序中合并这两个结果,以生成一个要显示的列表。