带过滤器的Lucene查询;“没有财产”;

带过滤器的Lucene查询;“没有财产”;,lucene,alfresco,alfresco-share,Lucene,Alfresco,Alfresco Share,我需要编写lucene查询/过滤器来获取没有特定属性的对象。 我试过。。。ISNULL:“cm:param_name”但id无效 编辑:我在aspect中添加了新属性,但尚未更新的对象在其列出的属性中没有该属性(使用节点浏览器检查) 你能更清楚地解释一下“没有财产”是什么意思吗?您的意思是不希望像“field:value”那样指定字段,而是将过滤器设置为“value” 编辑 您是在动态生成这些字段名,还是这是唯一一个缺少值的字段名?如果只有一个字段可能出现在文档中,也可能不出现在文档中,那么您可

我需要编写lucene查询/过滤器来获取没有特定属性的对象。 我试过。。。ISNULL:“cm:param_name”但id无效


编辑:我在aspect中添加了新属性,但尚未更新的对象在其列出的属性中没有该属性(使用节点浏览器检查)

你能更清楚地解释一下“没有财产”是什么意思吗?您的意思是不希望像“field:value”那样指定字段,而是将过滤器设置为“value”

编辑

您是在动态生成这些字段名,还是这是唯一一个缺少值的字段名?如果只有一个字段可能出现在文档中,也可能不出现在文档中,那么您可以在缺少该字段时使用默认值填充该字段,然后搜索该字段。否则,您可以尝试一个否定的rangequery,如:NOT foo:[*TO*]。这应该匹配foo字段中没有值的所有文档。出于性能目的,在第二种情况下,该字段应作为字符串字段(未分析)进行索引。

对于类似“cm:*”的查询,您应该只接收包含字段“cm”和内容的文档。请注意,您必须允许查询解析器使用setAllowReadingWildcard(true)进行前导通配符查询

也可以看看这篇文章,它涉及到你的问题的相反版本:

我设法用。。而不是(@namespace \:property:)

在Java和Lucene 3.6.2中,可以使用带有激活否定的“FieldValueFilter”:(这不是问题)

import org.apache.lucene.search.FieldValueFilter;
导入org.apache.lucene.search.indexsearch;
导入org.apache.lucene.search.MatchAllDocsQuery;
导入org.apache.lucene.search.TopDocs;

final IndexSearcher IndexSearcher=getIndexSearcher()您可以在此场景中使用ISUNSET和/或ISNULL

ISUNSET:"cm:title"
ISNULL:"cm:title"

我听不懂你的解释。我的问题对你来说一定是一样的D下次对此问题使用评论。我想要所有没有这个属性的对象。我在aspect中添加了新属性,但尚未更新的对象在其列出的属性中没有该属性(使用节点浏览器检查)。我将在问题中添加此解释。因此,您想要所有没有cm字段的文档,或者只是所有没有将cm字段设置为“param_name”的文档。如果第二种情况是您想要的,您可以尝试在子句前面添加NOT或a-,例如:“NOT cm:param_名称”或“-cm:param_名称”。如果您自己构建查询,这将是一个布尔查询,带有一个必不可修改项。这是java解决方案,当我需要它时,我需要一个简单的lucene QueryYouch。。对不起,我是在向谷歌询问“lucene属性过滤器”后发现的。我后来想出了这个解决办法。。我应该删除我的答案吗?