从Solr中的所有搜索结果中排除某些文档?

时间:2017-04-07 07:07:07

标签: solr

我是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. 使用以下内容:
  4. 
    
     <lst name="appends">
      <str name="excludeIds">doc_id_1,doc_id_2</str>
     </lst>
    &#13;
    &#13;
    &#13;

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

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

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

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

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

2 个答案:

答案 0 :(得分:0)

嗯,您始终可以向查询添加约束,以便不返回这些文档:

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放在处理程序定义中,或者像其他答案一样添加一个特定的字段。

答案 1 :(得分:0)

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

注意:

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