我正在构建一个使用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.
我想知道是否有人对如何处理这个有任何好的想法。在这个阶段,我并不太关心处理那些不是“字段开始”搜索的搜索,因为目前正在进行的搜索到底是什么,我会在时机成熟时处理它。
这就是我的想法,但它存在严重问题:
这有一个很大的问题,即我可能会获取数十万个术语并对其进行处理,这不会很快。
回想起来,将所有值加载到自己的索引中并按排序顺序获取所有值都没有什么不同。
我对这里的任何选项持开放态度,无论我是否可以以某种方式跳入查询“from”字段的大量方面的中间,或者我是否应该将所有内容放入另一个专门用于此目的的索引中(尽管我不知道我是如何构建和查询它的,或其他什么。
从我所看到的,我理想的解决方案是我可以指定facet字段,告诉ES我想从以“Smith”开头的那个开始,然后从那里显示,然后我有能够说“回20”,但我不确定这是可能的。
你可以在这里看到我正在谈论的那种事情的例子:http://hollisclassic.harvard.edu/ - 把史密斯称为“作者(姓氏第一)”,它给你一个(非常丑陋的样子) )浏览列表。
有什么想法吗?
答案 0 :(得分:0)
在:
带标记的那个是实际搜索过的那个,但你可以 根据排序顺序查看周围的那些,包括那些 实际上并不匹配查询。
我有类似的要求:“向用户显示如果搜索条件更放松,我们会找到多少记录”。 我通过做两次搜索(一次精确,一次更放松)来解决这个问题,因为ES的性能非常好,以至于进行一两次搜索并不重要。时间在显示(在我的情况下)中被吃掉而不在搜索中。
您仍然需要在应用程序中合并这两个结果,以生成一个要显示的列表。