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

Solr query syntax with if, exists and query functions

The Solr function query documentation 说:

exists(query({!v='year:2012'})) 将 return 对于 year=2012

的文档为真

我有这样的文档:

  {
    "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是一个多值字段,我想做的是:

如果我在其中一个文档中 returned “100666;;REMPLACEMENT” 与 prod_refBrand 完全匹配,我应该只有这个文档。

我发出了这样的查询,但是当 "if" return 是一个错误值时,它没有执行我想要的操作

q=prod_refBrand:if(exists(query({!v="prod_refBrand:100666;;REMPLACEMENT"})),"100666;;REMPLACEMENT",*)

如何修复查询?

好吧,我认为您无法在单个查询中实现这一目标。您会看到,大多数(如果不是全部)函数都按文档工作(包括存在和查询),因此这将 return 对于第一个文档为真,对于其他文档为假(每个文档的结果不同)。您不能使用此方法更改查询本身。

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