我閱讀了同一個問題的所有答案,並且我沒有更清楚哪一個應該用於我的用例和原因。 兩者都返回相同的結果。 我知道「FilterQuery會被緩存,使整個查詢時間更快」,就像某人正確回答。solr主要查詢與fq
我也明白「過濾也允許標記facet,因此您可以標記facet以包含爲您的查詢返回的所有方面」,就像其他人也正確回答的那樣。
我不明白讀到這個,就是爲什麼任何人都會使用Q,因爲FQ似乎更好,基於我見過的所有答案和書籍。
除了,我敢肯定,這可能是存在的一個原因。
我想知道什麼是最適合我的用例 - 文檔缺乏有用的示例。
- 我的文件有:日期,客戶,報告,以及其他一些領域
- 1日起企業= 3.5萬份文件。
- 文件的總數爲250萬,計數(60日* 8000個*客戶報告1000)
- 我刻面的日期,客戶,報告和我使用方面的標記。
- 用戶界面整體看起來像任何電子商務網站,例如:亞馬遜,左側有小平面。
- 不使用評分。
業務規則1:日期必須始終存在於每個查詢中。
業務規則2:99%的查詢將使用最新的日期,但RANDOM客戶端和隨機報告。
事實:我們確定它的表面很慢,而不是搜索。
問題:
鑑於這種搜索條件,而這些方式來編寫一個查詢:
A)Q =日期:20130214和客戶端:喬& facet.field =日期& facet.field =客戶端...
B)q =日期:20130214 & FQ =客戶端:喬& facet.field =日期& facet.field =客戶端...
C)Q =客戶端:喬& FQ =日期:20130214 & facet.field =日期& facet.field =客戶端...
d)Q = *:* & FQ =日期:20130214 & FQ =客戶端:喬& facet.field =日期& facet.field =客戶端...
- 你認爲哪以上的將是最好的,爲什麼?請記住,大多數查詢都將在首次執行FQ過濾之後運行,然後應用Q條件,或者以其他方式進行操作?大多數查詢都將與20130214
- 運行。
今天,我有D)在所有情況下使用,但我懷疑這是錯誤的,並導致Solr(版本3.6)中的OOM。
謝謝你的幫助!
感謝您的回覆。如果我說fq = 20130214&q = client:Paige,這是否意味着Solr必須首先掃描2.5億個客戶端文檔:Paige,然後過濾它們以僅保留日期爲20130214的文檔?如果是這樣,首先找到日期的所有內容(350萬文檔),然後根據客戶端進行過濾,效率會不會更高?甚至更大的問題:我怎麼知道,因爲似乎沒有工具可以嘗試這兩種情況。 – 2013-02-14 05:26:10
是的,過濾器查詢將在主搜索執行後執行。但根據您的文檔編號,您可能需要切換它們並使用'q = 20130214&fq = client:Paige',因爲您知道只需要搜索包含日期的350萬個文檔,然後過濾這些文檔以僅返回正確的客戶端。如何確定正確的做法並不難,也取決於需求和情景。至於測試查詢的工具,我會強烈推薦SolrMeter - http://code.google.com/p/solrmeter/ – 2013-02-15 12:54:45
感謝Paige。 你在兩個不同的回覆(基於業務規則和基於數字)的回答不同,所以我澄清了我原來的問題。 請你再看一遍。 此外,SolrMeter並未顯示Solr如何處理查詢 - 它按照什麼順序查找,按什麼順序查找,查找什麼等。 如果您熟悉Sybase(或任何RDBMS),我正在尋找相當於'set showplan on' 謝謝, -Dmitry。 – 2013-02-22 17:03:27