具有 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 对于第一个文档为真,对于其他文档为假(每个文档的结果不同)。您不能使用此方法更改查询本身。
显而易见的解决方案是发出两个查询:首先检查是否完全匹配,如果未找到任何内容,则使用完整结果重新查询。
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 对于第一个文档为真,对于其他文档为假(每个文档的结果不同)。您不能使用此方法更改查询本身。
显而易见的解决方案是发出两个查询:首先检查是否完全匹配,如果未找到任何内容,则使用完整结果重新查询。