Sorting 与solr查询和相关性作斗争

Sorting 与solr查询和相关性作斗争,sorting,solr,lucene,solr-boost,Sorting,Solr,Lucene,Solr Boost,我在使用Solr时遇到了增压问题。我们最近从Lucene转到Solr 我们有4个主要的搜索领域,我们搜索:本质,关键字,所有可搜索的,和质量;其中,对于索引中的每个文档,essence包含关键字中的前3个不间断单词。”“关键字”只是一个关键字列表。“allSearchable”保存的数据只是给定文档的其他数据的集合。我们在lucene中所做的是对用户在搜索框中键入的任何给定搜索进行3次搜索,以便根据相关性对搜索结果进行排序,如下所示: 输入到搜索框中的单词:tree 查询1:+本质:按“质量”进

我在使用Solr时遇到了增压问题。我们最近从Lucene转到Solr

我们有4个主要的搜索领域,我们搜索:本质,关键字,所有可搜索的,和质量;其中,对于索引中的每个文档,essence包含关键字中的前3个不间断单词。”“关键字”只是一个关键字列表。“allSearchable”保存的数据只是给定文档的其他数据的集合。我们在lucene中所做的是对用户在搜索框中键入的任何给定搜索进行3次搜索,以便根据相关性对搜索结果进行排序,如下所示:

输入到搜索框中的单词:tree

查询1:+本质:按“质量”进行树排序 如果查询1返回的足够我们想要获取的页面,则返回

查询2:+关键字:按“质量”进行树排序 如果查询1和查询2的组合为我们所在的页面返回了足够的结果,则返回结果

查询3:+allSearchable:按“质量”进行树排序 返回结果。如果没有,那就倒霉了

我的问题是分页。我过去不需要将分页startIndex行发送给Lucene。我可以要求所有的东西,然后把我得到的东西都翻过来,收集足够的结果返回,这取决于我要求的页面。对于Solr,我必须传递分页参数。我们的索引中有超过800万个文档,因此获取与“tree”之类的查询匹配的所有内容代价太高。问题是,如果我在查询1中查询第3页,但没有得到足够的结果,那么我必须继续查询2个关键字:tree。但这是不对的,因为我要求查询2的第3页结果,换句话说,给我所有与第3页的“关键字:树”匹配的文档。但这不是我真正想问的问题。我只想要求第1页的关键字,如果本质不匹配任何东西。等等

我真正想要的是一个查询,这足以满足我之前做的这三个查询,这样我就可以首先返回基本匹配项,然后返回关键字匹配项,最后返回allSearchable匹配项

我尝试在以下查询中使用boosting:essence:tree^4.0关键字:tree^2.0 allSearchable:tree^1.0


但这似乎不起作用,我不知道为什么?我做了分类,但结果仍然不正确。我使用的是默认的StandardRequestHandler,它似乎使用LuceneQueryParser,而不是Demax或eDiscoveryMax。通过在solrconfig.xml中的requestHandler的defaults部分添加一个qf参数,我可以看到boosting被发送到我使用boosting的URL中的solr。我当然知道lucene可以理解这些参数。有谁能告诉我如何构建一个查询,使我能够获得如上所述的所需结果?在此处输入代码

我建议使用,然后您可以指定跨字段的提升,如下面的示例所示:

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

您可能需要跨字段向上或向下调整提升值,以获得所需的结果。此外,eDiscoveryMax还有一些额外的参数,这些参数会影响提升以及查询的执行方式,您应该对此进行检查。

谢谢。我不知道问后续问题是否合适,所以如果我不在行,就打我屁股。问题:我能否以+searchField:searchValue的形式将lucene查询发送到eDiscoveryMax?是的,根据上面链接的查询语法部分,它支持完整的LuceneQuerySyntax,包括字段搜索。确定。我的单元测试也证实了这一点。我所做的就是运行大量不同的查询,将defType更改为edismax,所有测试都通过了。谢谢你,佩奇!