web-dev-qa-db-ja.com

Solr:solrインデックスからフィールド名を取得しますか?

すべての(または接頭辞付きの)フィールド名についてSolrインスタンスにクエリを実行するにはどうすればよいですか?

次のような動的フィールドを使用したい

category_0_s
category_1_s
...

しかし、いくつ存在するのかわかりません。したがって、すべてのフィールドを取得したいと思います(できれば接頭辞「category_」を付けて)。

何か案は?ありがとう

24
floplus

ルークハンドラーを使用します。

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

Xpathを使用して、探している動的フィールド定義に一致するタグdynamicBaseを持つすべてのフィールドを取得します。

22

このクエリは、動的フィールドを含む、使用中のすべてのフィールドのコンマ区切りのリストを返します。

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

元の質問に答えるために、これはcategory_で始まるすべてのフィールドのリストを取得する方法です

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

このクエリを新しいバージョンのSolrで機能させるには、facetパラメーターの存在が必要です。古いバージョンでは、それがなくても動作します。

古いバージョンでは、flパラメーターのワイルドカードは機能しません。

38
GoalBased

Javaアプリケーションからこれを行う必要がある場合は、 Solrj および LukeRequestRequestHandler を使用できます。

コードは次のようになります。

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    
}
1
cjungel