我目前正在使用Solr(6.4.0)安裝項目工作,並努力讓我的頭繞過查詢,我相信我需要使用查詢函數來滿足我要求。Solr - 在不一致的字段上過濾查詢函數
我的應用程序有一個Solr核心,跨越5種不同的文檔類型(用戶可以索引網站,文檔,文章等)。我遇到的問題是文章有開始日期和結束日期,因此用戶可以提前創建文章並將開始日期設置爲2周後。當查詢Solr我想添加一個函數,將明確地忽略所有索引類型:文章,其中活動日期大於現在,但不排除其他文檔類型,如網站等
我一直在讀Solr Wiki頁面(https://wiki.apache.org/solr/FunctionQuery#if)它有一些很好的例子,但我想我可能會實施錯誤,因爲我沒有看到預期的結果。我現在用的是PECL PHP擴展,並加入像這樣的查詢:
$query->addFilterQuery("if(exists(active-date), active-date:[* TO NOW], 1)");
如果我執行*:*
搜索約900結果返回,該指數已經大約8000條記錄,其中只有2條的有活動日期是在未來和所有「文章」的總數大約是200,所以它似乎是過濾出其他「索引類型」,而不是返回1(正數=真)的其他值。
總之,我需要一個查詢字段「active-date」(只在index-type:article上配置),檢查日期是否在將來 - 如果爲true,則排除,如果false包含在結果集中並且字段不存在包含在結果集中。
在此先感謝!
你的回答幾乎給了理想的結果,但最終的OR需要調整。 inline'$ query-> addFilterQuery(「(index-type:article AND active-date:[* TO NOW])OR(*:* -active-date:*)」);'如果你想更新你的答案上面的代碼我會標記爲答案,所以你得到的信譽,因爲我不會找到這個沒有你的幫助:) – UseYourName
完成。以前的例子是'*:* -index-type:article',但是由於您在任何其他資源上都沒有使用'index-type:article'的活動日期字段,所以您的更改可以正常工作。 – MatsLindh