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

是否从Solr中的所有搜索结果中排除某些文档?,solr,Solr,我是Solr的新手,有一项任务是阻止所有搜索查询结果中的某些文档 我搜索并找到了一些可以阻止结果的方法 提升.xml() 在查询中使用“excludeIds”参数(:&levatedids=doc3,doc4&excludeIds=doc6,doc8) 使用以下命令: 文件编号1,文件编号2 好吧,您可以随时向查询添加约束,以便不返回这些文档: q=abc&fq=id:[* TO *] -id:(doc_id_1 doc_id_2) 使用上面的fq,可以排除doc_id_1和_2。

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

我搜索并找到了一些可以阻止结果的方法

  • 提升.xml()
  • 在查询中使用“excludeIds”参数(:&levatedids=doc3,doc4&excludeIds=doc6,doc8)
  • 使用以下命令:
  • 
    文件编号1,文件编号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放在处理程序定义中,或者像另一个答案所说的那样添加一个特定字段。

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

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

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

    注:

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

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

    注:

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

  • fq似乎是正确的答案。OP:您可以将fq参数直接放入搜索处理程序中,这样运行查询的客户端就不必知道它在那里,它将应用于所有客户端。但是如果我有(比如)50K个需要阻止的ID,这会影响响应时间吗?因为我们需要发送所有这些50k ID以及每个查询,所以似乎是正确的答案。OP:您可以将fq参数直接放入搜索处理程序中,这样运行查询的客户端就不必知道它在那里,它将应用于所有客户端。但是如果我有(比如)50K个需要阻止的ID,这会影响响应时间吗?因为我们需要发送所有的50k ID和每个查询,他说ID会动态变化,所以不会起作用?不是这样,就是我误解了这个问题。我以为身份证会随着时间的推移而改变request@Persimmonium每当“ID”发生更改时,文档相应的“删除”字段都需要更新为“真”。那么文档将不会自动显示在结果中。这是否意味着每当ID列表更改时,我都需要在Solr中重新索引整个数据?或者有没有办法更新Solr中文档的字段?@maddyman您只能更新需要更改的文档。在Solr中,可以选择只更改整个文档中的一个字段。请查看这个链接@Riya,然后他需要在运行查询之前更新文档……这不会很快。他说ID会动态变化,所以不会起作用?不是这样,就是我误解了这个问题。我以为身份证会随着时间的推移而改变request@Persimmonium每当“ID”发生更改时,文档相应的“删除”字段都需要更新为“真”。那么文档将不会自动显示在结果中。这是否意味着每当ID列表更改时,我都需要在Solr中重新索引整个数据?或者有没有办法更新Solr中文档的字段?@maddyman您只能更新需要更改的文档。在Solr中,可以选择只更改整个文档中的一个字段。请查看这个链接@Riya,然后他需要在运行查询之前更新文档……这不会更快