2010-07-09 76 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