2014-01-07 41 views
7

背景

我試圖將兩個功能分開工作,但很難讓它們一起工作。Solr - 方法查詢中的{!}}

* 1)如solr wiki所述,我可以標記特定的fq,然後將其排除在我的facet.field上。這將使我的面計數當選擇某個值,這樣保持不變甚至:

fq={!tag=pt}price:100&facet=true&facet.field={!ex=pt}price 

* 2)我想用facet.query如下:

facet=true&facet.query=price:[0 TO 100]&facet.query=price:[100 TO *] 

所以我想結合* 1 & * 2,這是我的嘗試:

fq={!tag=pt}price:[0 to 100]&facet=true&facet.query={!ex=pt}price:[0 TO 100]&facet.query={!ex=pt}price:[100 TO *] 

實際發生的是,我收到回從Solr的:

<lst name="facet_queries"> 
    <int name="{!ex=pt}price:[0 TO 100]">8</int> 
    <int name="{!ex=pt}price:[100 TO *]">19</int> 
</lst> 

我的問題是:

爲什麼是名稱的一部分{EX = PT!}?這弄亂了我的一些邏輯。 也許我濫用了它,如果是這樣的話,那麼正確的方法是什麼?

更多信息

什麼我期待是這樣的:(同我收到如果運行* 2 *無1)

<lst name="facet_queries"> 
    <int name="price:[0 TO 100]">8</int> 
    <int name="price:[100 TO *]">19</int> 
</lst> 

這是有道理的,因爲如果我運行* 1這是我收到的facet_fields:

<lst name="facet_fields"> 
    <lst name="price"> 
     <int name="80">8</int> 
     <int name="150">19</int> 
    </lst> 
</lst> 

這並不是說名字= 「{價格=前PT!}」

回答

4

我想這是因爲:

  • *1示例使用facet.field它應該被命名爲相同的方式,因爲它採用現場(沒有任何不包括信息)。
  • *2示例使用facet.query這應該代表query(與在查詢中使用所有可能的信息......這是沒有意義的,而不排除部分顯示的查詢,如部分)

不管怎麼說如果有必要來命名它使用排除功能性的特定方面,那麼可以通過以下方式進行(使用參數):

facet.field={!ex=pt key=good_name_for_a_facet}price

facet.query的相同workds ...例如如果你要隱藏的前一部分:

facet.query={!ex=pt key=$queryOne}price:[0 TO 100]

其中queryOne是傳遞給SOLR作爲queryOne=price:[0 TO 100]

所以最終的查詢會是這個樣子原始參數的一部分:

fq={!tag=pt}price:[0 TO 100]&facet=true&facet.query={!ex=pt key=$queryOne}price:[0 TO 100]&facet.query={!ex=pt key=$queryTwo}price:[100 TO *]&queryOne=price:[0 TO 100]&queryTwo=price:[100 TO *] 

詩我已經使用了外部參數,因爲這樣 - 不需要手動轉義特殊字符。

+0

工作+現在我明白它背後的原因,謝謝:) –

1

我遇到了這個問題,我通過向{!ex}參數添加一個本地param鍵來解決它。因此,對於你的榜樣,我會做:

FQ = {價格標籤= PT!}:![0至100] &面=真& facet.query = {EX = PT 鍵= 「0〜100」}價格:![0至100] & facet.query = {EX = PT 鍵= 「100 *」}價格:100 *]

這樣做的原因是QueryFacet從區別對待FieldFacet(facet.field vs facet.query)。 Solr僅刪除本地參數,即FieldFacet鍵中的{!ex ...}。其實,我跟蹤下來的代碼,這是你可以在線路680 FacetComponent.java看到(V 4.6)從下面的鏈接:

http://svn.apache.org/viewvc/lucene/dev/tags/lucene_solr_4_6_0/solr/core/src/java/org/apache/solr/handler/component/FacetComponent.java?view=markup

我沒有進一步跟進,因爲我的使用問題情況下,需要一個「漂亮」鍵反正:)

+0

謝謝!我選擇了@rchukh的回答,因爲它有更多的信息 –

1

這裏是我如何解決它:

for (int i = 0; i < facetQueries.size(); i++) { 
    String value = facetQueries.get(i); 
    query.addFacetQuery(String.format("{!ex=%s key=$fQValue_%s}%s", value, i, value)); 
    query.add(String.format("fQValue_%s", i), value); 
}