【问题标题】:Exclude certain documents from all search results in Solr?从 Solr 的所有搜索结果中排除某些文档?
【发布时间】:2017-04-07 07:07:07
【问题描述】:

我是 Solr 的新手,我的任务是在所有搜索查询的结果中阻止某些文档。

我搜索并发现了一些可以阻止结果的方法。

  1. elevate.xml (https://wiki.apache.org/solr/QueryElevationComponent)
  2. 在查询中使用“excludeIds”参数(http://localhost:8983/solr/elevate?q=:&elevatedIds=doc3,doc4&excludeIds=doc6,doc8)
  3. 使用以下内容:

 <lst name="appends">
  <str name="excludeIds">doc_id_1,doc_id_2</str>
 </lst>

但上述所有 3 种解决方案都有局限性。

  1. elevate.xml 仅适用于静态关键字/搜索,因此不适用于所有搜索。

  2. 在查询中附加 exculdeIds 会增加来自 Java 代码的 Post 请求的长度。

  3. 更新 solrconfig.xml 以附加 exculdeIds 将产生预期结果,但每次我们需要阻止的 Id 列表发生变化时,我们都必须重新启动 Solr。

那么有没有办法为所有搜索动态阻止 Solr 中的文档 ID 列表?

【问题讨论】:

    标签: solr


    【解决方案1】:

    您的问题的另一个答案是添加一个新字段并将“状态”(显示或不应该显示)存储在那里,并在 Solr 过滤器查询中使用它。 例如。将字符串字段名称设置为“remove”,对于不应在结果中显示的文档,将“remove”字段值添加为“true”。 所以你可以像这样查询 "q=abc&fq=-remove:true"

    注意:

    1. 从长远来看,这有多种用途。如果文档需要在其他查询中显示,您只需删除 fq 过滤器即可。
    2. 您可以添加任意数量的文档以使字段“remove=true”并且搜索查询不会有任何变化。该文档不会显示在结果中。
    3. 您也可以在“solrconfig”中添加此过滤器,因为不需要每次都更改它。

    【讨论】:

    • 他说id是动态变化的,所以这行不通?要么那个,要么我误解了这个问题。我认为 id 会随着每个请求而改变
    • @Persimmonium 每当“ids”发生变化时,文档相应的“remove”字段需要更新为“true”。那么文档将不会自动显示在结果中。
    • 这是否意味着每当 ID 列表发生更改时,我都需要在 Solr 中重新索引整个数据?或者有没有办法更新 Solr 中文档的字段?
    • @maddyman 您只能更新需要更改的文档。并且有选项可以在 Solr 中仅更改整个文档中的一个字段。请查看此链接cwiki.apache.org/confluence/display/solr/…
    • @Riya 那么他需要在运行查询之前更新文档......这不会更快
    【解决方案2】:

    好吧,您总是可以在查询中添加一个约束,这样这些文档就不会被返回:

    q=abc&fq=id:[* TO *] -id:(doc_id_1 doc_id_2)
    

    使用上面的 fq,您排除了 doc_id_1 和 _2。如果要排除的文档集将在稍后的另一个查询中重复,请保持原样(fq 将由 solr 缓存),如果永远不会重复,请避免使用

    缓存它>
    q=abc&fq={!cache=false}id:[* TO *] -id:(doc_id_1 doc_id_2)
    

    编辑:我知道 ID 会随着每个请求而改变。如果不是这种情况,那么您当然可以将 fq 放在处理程序定义中,或者像其他答案所说的那样添加一个特定的字段。

    【讨论】:

    • fq 似乎是正确的答案。 OP:您可以将 fq 参数直接放入搜索处理程序中,因此运行查询的客户端甚至不必知道它是否存在,它将应用于所有客户端。
    • 但是如果我有(比如说)50K ids 需要被阻止,这会影响响应时间吗?因为我们需要将所有这些 50k id 与每个查询一起发送
    猜你喜欢
    • 1970-01-01
    • 2012-05-30
    • 2023-03-13
    • 1970-01-01
    • 2013-09-16
    • 1970-01-01
    • 1970-01-01
    • 2018-10-23
    • 1970-01-01
    相关资源
    最近更新 更多