挣扎于solr查询和相关性

时间:2013-03-12 15:04:35

标签: sorting solr lucene solr-boost

使用Solr时,我遇到了提升问题。我们最近从Lucene转到了Solr。

我们搜索了4个(主要)搜索字段:精华,关键字,allSearchable和质量;其中,对于索引中的每个文档,本质包含关键字中的前3个不间断单词。 'keywords'只是一个关键字列表。并且'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的defaults部分添加qf参数来使用boost) solrconfig.xml)。我当然知道lucene可以理解这些参数。任何人都可以告诉我如何能够构建一个允许我得到我想要的结果的查询,如上所述?enter code here

1 个答案:

答案 0 :(得分:0)

我建议使用ExtendedDismax Query Parser (eDisMax),然后您可以指定字段中的提升功能,如下例所示:

http://localhost:8983/solr/select/?q=tree
  &defType=edismax&qf=essence^4.0+keywords^2.0+allSearchable^1.0

您可能需要在字段中向上或向下调整增强值以获得所需的结果。此外,eDisMax还有其他参数可以影响提升以及如何执行查询。