我是Solr的新手,我的任务是阻止所有搜索查询的结果中的某些文件。
我搜索并找到了几种可以阻止结果的方法。
<lst name="appends">
<str name="excludeIds">doc_id_1,doc_id_2</str>
</lst>
&#13;
但上述所有3种解决方案都存在局限性。
elevate.xml仅适用于静态关键字/搜索,因此不适用于所有搜索。
在查询中追加exculdeIds会增加来自Java代码的Post请求的长度。
更新solrconfig.xml以附加exculdeIds将给出预期结果,但每当我们需要阻止的ID列表发生变化时,我们必须重新启动Solr。
那么有没有办法在所有搜索中动态阻止Solr中的文档ID列表?
答案 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:真正的”
注意: