我在使用 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