2015-07-10 36 views
0

我創建了一個集中使用Solr(5.2.1)分面功能的搜索應用程序。一個要求是限制由指定字段的前綴返回的構面的數量。單個分面字段上的多個facet.prefix

標準的Solr查詢語法非常適用於單前綴值:

/select?q=*%3A*&rows=0&wt=json&indent=true&facet=true&facet.field=DocumentKind&f.DocumentKind.facet.prefix=faq 

輸出:

"facet_counts": { 
    "facet_queries": {}, 
    "facet_fields": { 
     "DocumentKind": { 
     "faq": 1523 
     } 
     ... 

不幸的是這不工作時,我必須用更多的限制賽場上的面比一個前綴:

/select?q=*%3A*&rows=0&wt=json&indent=true&facet=true&facet.field=DocumentKind&f.DocumentKind.facet.prefix=manual&f.DocumentKind.facet.prefix=faq 

我預計它會返回類似這樣的內容:

"facet_counts": { 
    "facet_queries": {}, 
    "facet_fields": { 
     "DocumentKind": { 
     "faq": 1523, 
     "manual": 2366 
     } 
     ... 

但它給出了與以前相同的輸出。

在上面的示例中,我匹配整個構面值,但在實際使用情況下,我確實必須匹配前綴。爲了簡潔起見,我展示了這個例子。

我可以在我的應用程序中對此進行過濾,但Solr返回的數據大小非常重要。

回答

7

我在我的應用程序中有類似的問題。解決這個問題的方法是當地的參數。即如果我刻面的數據從Solr的高科枝產品例如找出產品數量可用或不可用inStock我需要這樣運行查詢:

http://localhost:8983/solr/techproducts/select?q=*%3A*&wt=json&indent=true&facet=true&facet.field=inStock 

,我會得到下面的結果,其中包括來自inStock現場所有dictinct值:

... 
"facet_counts":{ 
    "facet_queries":{}, 
    "facet_fields":{ 
     "inStock":[ 
     "true",17, 
     "false",4]}, 
    "facet_dates":{}, 
... 

但在你的情況下,你想區分使用字段值的多個前綴facet結果。這裏的本地參數是非常方便的工具。現在,如果我想根據特定值從像truefalseinStock場做facating,我需要使用!key標記結果:因此,使用多刻面局部PARAMS前綴查詢數據後

http://localhost:8983/solr/techproducts/select?q=*:*&wt=json&indent=true&facet=true&facet.field={!key=inStock_True+facet.prefix=true}inStock 

... 
"facet_counts":{ 
    "facet_queries":{}, 
    "facet_fields":{ 
     "inStock_True":[ 
     "true",17]}, 
    "facet_dates":{}, 
... 

/select?q=*:*&rows=0&wt=json&indent=true&facet=true&facet.field={!key=DocumentKind_manual+facet.prefix=manual}DocumentKind&facet.field={!key=DocumentKind_faq+facet.prefix=faq}DocumentKind 

,你會看到結果這樣的:

... 
    "facet_counts":{ 
     "facet_queries":{}, 
     "facet_fields":{ 
      "DocumentKind_faq":[ 
      "faq",1523], 
      "DocumentKind_manual":[ 
      "manual",2366]}, 
... 
+0

THX!這正是我所期待的 – Marek