【发布时间】:2013-02-28 04:15:54
【问题描述】:
我在使用 Solr 时遇到了提升问题。我们最近从 Lucene 切换到了 Solr。
我们有 4 个(主要)搜索字段供我们搜索:本质、关键字、allSearchable 和质量;其中,对于索引中的每个文档,essential 包含关键字中的前 3 个非停用词。 “关键字”只是关键字列表。 'allSearchable' 保存的数据只是给定文档的其他数据的集合。我们在 lucene 中所做的是对用户在搜索框中键入的任何给定搜索进行 3 次搜索(以便按相关性对搜索结果进行排名),如下所示:
在搜索框中输入的单词:tree
查询 1:+essence:tree(按“质量”排序)
如果查询 1 返回的页面足够我们想要获取的页面,则返回。
查询 2:+keywords:tree(按“质量”排序)
如果查询 1 和查询 2 的组合为我们所在的页面返回了足够的结果,则返回结果。
查询 3:+allSearchable:tree(按“质量”排序)
返回结果。如果没有,那就倒霉了。
我的问题是分页。我以前不必将分页(startIndex,行)发送到 Lucene。我可以要求所有内容,然后翻转我返回的所有内容,收集足够的结果以返回,具体取决于我要求的页面。使用 Solr,我必须传递分页参数。我们的索引中有超过 800 万个文档,因此要获取与“树”之类的查询匹配的所有内容太昂贵了。问题是,如果我在查询 1 中请求第 3 页,但我没有得到足够的结果,那么我必须继续查询 2(关键字:树)。但这不对,因为我要求查询 2 的第 3 页结果(换句话说,给我所有与第 3 页的“关键字:树”匹配的文档)。但这并不是我真正想问的问题。如果本质不匹配任何内容,我只想询问关键字的第 1 页。等等。
我真正要找的是一个查询,它足以满足我之前所做的这三个查询,这样我首先得到本质匹配,其次是关键字匹配,最后是 allSearchable 匹配。
我尝试对这个查询使用提升:essence:tree^4.0 keywords:tree^2.0 allSearchable:tree^1.0
但这似乎不起作用,我不知道为什么?我拿出了各种东西,但事情仍然没有给我正确的结果。我正在使用默认的 StandardRequestHandler(它似乎使用 LuceneQueryParser(不是 dismax 或 edismax)。我可以看到提升正在发送到 URL 中的 solr(我通过在我的 requestHandler 的默认部分添加一个 qf 参数来使用提升) solrconfig.xml)。我当然知道 lucene 可以理解这些参数。谁能告诉我如何构造一个查询,让我得到我想要的结果,如上所述?enter code here
【问题讨论】:
标签: sorting solr lucene solr-boost