2011-10-12 131 views
0

假設本身以下:比較查詢

  • Q = FOO返回2000000個結果
  • Q =類型:SalesOrder返回300000個結果
  • q = refId:12345返回2,000個結果

默認的運算符是OR。

如果用戶將作出許多查詢喜歡我的文章

也就是說,

  • 查詢:Q = foo的& FQ =類型:SalesOrder & FQ = REFID:12345

  • 查詢B:Q =(foo和類型:SalesOrder AND REFID:12345)

這將欲使用?我知道個別fq會被緩存,但是我想知道Solr會在內存中做些什麼不同,或者當Solr做這樣的大計算時我可能並不知道。最後,結果是一樣的,但每個的優缺點是什麼?

回答

2

查詢:Q = FOO & FQ =類型:SalesOrder & FQ = REFID:12345

如果你想限制結果的數量作爲一個過濾器,而不是搜索過,你應該使用的過濾器查詢的字段。

fq - 提供一個可選的過濾查詢。查詢結果僅限於搜索過濾器查詢返回的結果。 Filtered queries are cached by Solr。它們對於提高複雜查詢的速度非常有用。

如果您的情況看起來像您想過濾掉類型爲SalesOrder和refid 12345的結果,那麼過濾器查詢似乎是正確的,而不是在查詢q參數中使用它們。

0

查詢:你有一個第一結果爲,這是獲得過濾

查詢B「foo」的設置:你有要爲其計算的交點3個的結果集。

因此,如果「type:SalesOrder」給出了一個巨大的結果集例如,queryA將會更有效率。

如果查詢不是帶有分析器的純文本,但它是一個ID(shop:1234),最有效的方法是用作查詢的結果集爲最小的結果集(q = refId:也許吧?)並使用另外兩個參數作爲過濾器