【问题标题】:solr displayed some results first when they are part of the results当它们是结果的一部分时,solr 首先显示一些结果
【发布时间】:2011-09-08 14:19:20
【问题描述】:

我认为这个 solr psedo-doc

<doc>
<field name="title"/>
<field name="name"/>
<field name="keywords"/>
</doc>

一些文档会有关键字“up”,这意味着当且仅当它们是搜索结果。

假设我有:

doc1('title1','Bob, Alice','people, up, couple')
doc2('title2','Smart Phone, Laptop, Bob','devices, electronics')

如果我使用“title:title2 name:Bob”进行查询,那么我应该首先获取 doc1(它有 'up' 关键字)。 如果我使用“name:Bob”进行查询,出于同样的原因,我仍然会首先获得 doc1。 如果我使用“name:Laptop”进行查询,那么我应该只在结果中获得 doc2。不应包含 doc1,因为它与我的搜索查询不匹配。

有什么建议吗?

【问题讨论】:

    标签: solr


    【解决方案1】:

    你有几个选择来做这样的事情:

    • 函数查询/增强查询(在 dismax 处理程序中)
    • 在索引期间(增强文档)
    • 将“up”关键字提取到附加字段并按此字段排序,而不是得分

    例如(使用 dismax 处理程序):

     /select?defType=dismax&q=...&bq=keywords:"up"^1000
    

    【讨论】:

    • 只能查询不能修改索引。请举个例子?
    • 如果您可以使用 dismax,请尝试以下操作:/select?defType=dismax&q=...&bq=keywords:"up"^1000
    【解决方案2】:

    这可以通过 Solr 的查询时间提升来解决。因此,遵循Solr Relevancy FAQ 的指导 - 您可以为所有查询添加额外的增强搜索词,例如title:title2 name:Bob keywords:up^2

    您还可以在为每个文档编制索引时确定是否存在 up 关键字,然后将其存储在架构中的附加字段(例如布尔值)中,并根据该布尔值字段提升查询结果。

    【讨论】:

    • 您的第一个建议不起作用,因为在每次搜索中我都必须附加关键字:up^2 所以当我使用 title:title10 关键字搜索时:up^2 - 尽管有我不应该的事实
    • 好的,那么您将需要走第二条路线并存储您可以在查询时提升的附加字段。
    猜你喜欢
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多