我有一个结构,我想搜索我的文件并过滤/排名/设置我父母的条件。例如,doc是匹配,因为它包含我搜索的字符串,但也因为它的父元素包含某个值。
使用图解析器并尝试使用过滤器是我注意到这样做的最佳方式。我首先尝试阻止加入子解析器,但它不会为我做。
我现在面临的问题是我似乎无法让过滤器以这种方式工作: traversalFilter =“( - field:x)OR(field2:y)”
意思是,如果字段没有值x就没关系,如果字段的值为x而field2的值为y,那么它也可以。其他案件被过滤掉了。
但它不起作用。任何帮助表示赞赏!
修改以获取更多信息: 我已经设置了一个测试核心,我的所有字段都存储在text_general字段中。默认solrconfig。我有一个简单的链接,我使用from参数作为文档ID。并且一个字段存储每个文件儿童的所有ID。并且图解析器工作正常,它只是这种过滤器对我不起作用。
我的文件的字段值为a或b。
这样的查询:
q=*
fq={!graph from=id to=to returnRoot=false traversalFilter="(field:b)" }id:0
此查询过滤掉任何没有b作为字段值的文档及其子文件。
q=*
fq={!graph from=id to=to returnRoot=false traversalFilter="(-field:b)" }id:0
然后应该在相反的情况下工作。使用b作为值过滤掉文档。但由于某些原因,这不起作用。
修改 来自solrquerysyntax: https://wiki.apache.org/solr/SolrQuerySyntax
允许使用纯负面查询(禁止所有条款)。 -inStock:false查找inStock不是假的所有字段值
这就是为什么q = * fq = - (field:x)在返回字段中不包含值x的所有文档时工作正常。
那么为什么我不能在图遍历中添加相同的过滤器
EDIT3: 我现在开始查看图解析器,并注意到当过滤 - ( - field:x)与+ field:x相同时。但是+( - field:x)与-field:x不同,并且不起作用。