我正在爲我們的網站開發產品過濾器,並遇到了有關使用「facet.missing = true」的一些困難。使用solr查找缺失值的消極方面查詢時遇到問題
我知道我應該使用像「fq = -facetField:[* TO *]」這樣的查詢過濾器來將結果過濾爲缺少該字段的產品。
我已經爲我的應用程序的全局過濾器輔助動態構建FQ參數爲所有查詢,以防止任何從基於用戶許可的過濾器基本上是這樣的(PHP)錯過了:
$params['fq'] = sprintf('((%s) AND (%s))', $custom, $system);
其中,$系統是全球基於許可的過濾器,它可能看起來像(而不是實際的,但類似):
(isdiscontinued:0 AND ishidden:0 AND contract:3)
$定製包含實際的過濾器查詢的用戶通過UI建設。假設筆記本藍牙過濾器的名稱爲fq_bluetooth,其值爲:否,是或缺少值。這將使最終FQ的樣子:
((-fq_bluetooth:[* TO *]) AND ((isdiscontinued:0 AND ishidden:0 AND contract:3)))
但是它返回0產品,爲我送這個類別查詢。
如果我修改過濾查詢:
((fq_bluetooth:[* TO *]) AND ((isdiscontinued:0 AND ishidden:0 AND contract:3)))
然後我得到的結果可能是預期未+的計數,不顧不明。
我應該如何格式化篩選器查詢以使其正常工作?
[編輯]
我可能還需要刻面結合,只有產品沒有藍牙或者沒有指定藍牙是那些可能進行篩選。因此,也許這樣的(這當然也不行):
fq_bluetooth:("No" OR -[* TO *])
被解析爲:
((-fq_bluetooth:[* TO *] OR fq_bluetooth:"No") AND ((isdiscontinued:0 AND ishidden:0 AND contract:3)))
我與debugQuery上,我看到一個過濾器查詢像注意到:
fq_bluetooth:No -fq_bluetooth:[* TO *]
我沒有看到或解析查詢 - 從我的研究FQ參數查詢不履行或運算符(?)。
也許OR正在工作,但由於否定查詢本身似乎失敗了,也許這就是爲什麼我看不到OR在這樣結合時工作的原因。
感謝您的迴應qux!我設法試圖讓我的查詢如下所示:fq = -fq_bluetooth:[* TO *]&fq =(isdiscontinued:0 AND ishidden:0 AND contract:3)(順便說一下,系統過濾器還有更多的組件, ORed元素)。當查詢工作時,它會失敗,當我想添加多個條件:fq = fq_bluetooth :(「否」或 - [* TO *])&fq =(isdiscontinued:0 AND ishidden:0 AND contract:3) – Chris 2014-09-04 14:13:47
你有沒有嘗試沒有parenteshis?即fq = fq_bluetooth:「否」或 - [* TO *] – qux 2014-09-05 19:09:16
問題是否定條款。嘗試像這樣:'fq = fq_bluetooth:否OR(-fq_bluetooth:[* TO *] *:*)'這適用於我。因此,無論何時您想匹配缺少的值,請在您的應用查詢生成器中使用'(-fieldname:[* TO *] *:*)' – qux 2014-09-05 19:36:43