在我的項目中,我們使用solr爲很多不同類型的文檔編制索引,例如Books和Persons,其中包含一些常用字段(如名稱)和一些特定類型的字段(如類別或組人屬於至)。任何方式來合併solr中的兩個查詢?
我們想要做查詢,可以找到書籍和人員,爲每個文件類型應用一些過濾器。喜歡的東西:
- 找到名字和/或內容
- 但只有書籍從類別「小說」和「幻想」
- 只有從一羣人「的所有書籍,並以「讓」人穿山甲」
- 一切按分數
一個非常簡單的方式做整理,這將是:
q = name:jean content:jean
&
fq=
(type:book AND category:(fiction fantasy))
OR
(type:person AND group:pangolin)
但很可惜,因爲fq
被緩存起來,我喜歡的東西讓我簡單等更具重用性fq
這樣的:
fq=type:book
,fq=type:person
,fq=category(fiction fantasy)
,fq=group:pangolin
。
有沒有辦法告訴solr合併或組合許多查詢?像「分組」fq
在一起。
我對_query_
讀了一些關於嵌套查詢的內容,但關於它的極少數文檔讓我覺得這不是我正在尋找的解決方案。
我敢肯定,這是不可能的。每個過濾器查詢(fq)都是獨立計算的,並生成一個緩存docset(無序的docid集合)。 Fq是有用的(快速讀取),因爲當指定其中的一些文檔時,文檔集會被快速截斷搜索空間。換句話說:指定多個過濾器查詢在邏輯上導致AND'ing他們 –
這是一個恥辱,Solr Fieldcollapsing http://wiki.apache.org/solr/FieldCollapsing不支持追加fq的後你指定字段組合(在你的情況'類型'),這將幾乎解決它。不過我希望這個鏈接可能會有用,因爲這是一種很好的方式來表示每種類型的N個頂級文檔。雖然我意識到這不是100%你在這裏問.. –
我非常確定這也是不可能的,但我希望我錯過了一些:)在一個查詢中設置fq組是非常酷的事情,類似於'fq = {group:A} ...&fq = {group:A} ...&fq = {group:B}',所以solr會播放查詢,然後用類似「all fq A組的所有fq「而不是其簡單的」全部fq「。那麼,我想我必須使用我在@Paige Cook回答中評論中描述的非現場條件解決方案。無論如何感謝您的答案! –