2010-07-09 78 views
18

如何查詢所有(或前綴)字段名稱的solr實例?Solr:從solr索引中檢索字段名稱?

我想用動態的領域,如

category_0_s 
category_1_s 
... 

,但我不知道有多少可能存在。所以我想檢索所有的字段(最好使用前綴「category_」)。

任何想法?由於

回答

20

使用盧克處理程序:

http://solr:8983/solr/admin/luke?numTerms=0 

使用XPath來獲取所有具有標籤DYNAMICBASE匹配您正在尋找的動態字段定義字段。

+1

是的!而已。謝謝。 – floplus 2010-07-09 13:02:59

+0

@Philippe不會得到所有正在使用的動態字段的名稱,這是原始海報要求的名稱。仔細閱讀問題和答案。 – GoalBased 2015-04-04 14:39:58

+0

@GoalBased好吧,但如果不是批評你給出了更好的解決方案,那也會有幫助。所以要更新我的「答案」,正確調用動態字段是http:// host:/solr/collection/schema/dynamicfields。有關更多選項,請參閱https://cwiki.apache.org/confluence/display/solr/Schema+API – Philippe 2015-04-04 14:51:02

1

如果您需要從Java應用程序執行此操作,則可以使用SolrjLukeRequestRequestHandler

你的代碼看起來像這樣。

LukeRequest lukeRequest = new LukeRequest(); 
lukeRequest.setNumTerms(0); 

LukeResponse lukeResponse = lukeRequest.process(server); 

Map<String, FieldInfo> fieldInfoMap = lukeResponse.getFieldInfo(); 

for (Entry<String, FieldInfo> entry : fieldInfoMap.entrySet()) { 

    String fieldName = entry.getKey(); 
    FieldInfo fieldInfo = entry.getValue(); 

    // process fieldInfo  
} 
+0

'facet'從哪裏來? – tar 2015-08-18 16:44:07

+0

對不起,這是一個錯字。修復了有效地迭代hashmap條目的代碼。希望這可以幫助。 – cjungel 2015-08-18 17:25:18

25

該查詢將返回所有正在使用的字段(包括動態字段)的逗號分隔列表。

select?q=*:*&wt=csv&rows=0&facet 

要回答原來的問題,這就是如何讓所有的字段列表開始category_

select?q=*:*&wt=csv&rows=0&facet&fl=category_* 

作出較新版本的這個查詢工作所需的facet參數的存在Solr。在舊版本中,它將在沒有它的情況下工作。

在舊版本中,fl參數中的通配符不起作用。

+2

在Solr5中,包括'facet'和'facet.field'會導致400錯誤請求,但仍包含這些字段。離開'facet.field'返回字段和200成功 – Izkata 2015-04-20 19:54:08

+0

@Izkata感謝您的改進!我已經更新了我的答案。奇怪的是,設置'facet = true'不起作用,但是'facet'沒有任何值。 – GoalBased 2015-04-21 03:11:21

+0

在Solr 6.3上,只有fl = id,category ...沒有facet = on。我想知道如果我仍然需要在架構中添加一些東西來顯示其他信息 – gadelkareem 2016-12-13 20:24:07