具有if,exists和query函数的Solr查询语法

时间:2015-04-20 09:41:40

标签: solr

The Solr function query documentation说:

存在(query({!v ='year:2012'}))对于年份= 2012的文档将返回true

我有一个类似的文件:

  {
    "prod_refExt": [
      "1.37.816-nr¤|¤100666¤|¤123596¤|¤5.134.06"
    ],
    "prod_oid": "21956",
    "prod_label": "COIN",
    "prod_refBrand": [
      "1.37.816-nr;;NOREMAT¤|¤100666;;REMPLACEMENT¤|¤123596;;NOREMAT¤|¤5.134.06;;ROUSSEAU"
    ],
    "prod_xrmCategory": [
      "0001007b"
    ],
    "prod_code": "123596"
  }

prod_refBrand是一个多值字段,我想要做的是:

如果我在其中一个文档中返回“100666 ;; REMPLACEMENT”作为prod_refBrand的完全匹配,我应该只有这个文档。

我发出这样的查询,但是当“if”返回错误值

时,它不会执行我想要的操作
q=prod_refBrand:if(exists(query({!v="prod_refBrand:100666;;REMPLACEMENT"})),"100666;;REMPLACEMENT",*)

如何修复查询?

1 个答案:

答案 0 :(得分:1)

好吧,我不认为你可以在一个查询中实现这一目标。您可以看到,大多数(如果不是全部)函数每个文档都有效(包括存在和查询),因此对于第一个文档将返回true,对于其他文档将返回false(每个文档的结果不同)。您无法使用此方法更改查询本身。

显而易见的解决方案是发出两个查询:首先检查完全匹配,如果找不到任何内容,请使用完整结果重新查询。