2016-12-26 4 views
0

Apache Luceneを初めて使用しました。私はファセットライブラリと組み合わせて6.3.0という最新バージョンを使用しています。 は、私はgithubの上で見つかった例に基づいて:https://github.com/apache/lucene-solr/tree/master/lucene/demo/src/java/org/apache/lucene/demo/facetApache Luceneが文書のファセットフィールドを返す

私は、次のドキュメント

Document doc = new Document(); 
doc.add(new FacetField("Author", "Bob")); 
doc.add(new FacetField("Publish Date", "2010", "10", "15")); 
doc.add(new FacetField("Tags", "A")); 
doc.add(new FacetField("Tags", "B")); 

//[FacetField(dim=Author path=[Bob]), FacetField(dim=Publish Date path=[2010, 10, 15]), FacetField(dim=Tags path=[A]), FacetField(dim=Tags path=[B])] 
System.out.println(doc.getFields()); 

//null 
System.out.println(doc.getField("Author")); 

doc.getFields()戻ってすべてのフィールドが、ヌルdoc.getField("Author")リターンを持っています。 何か間違っていますか?

dummy 
dummy 
dummy 
dummy 

そして、私はこのdoc.getField("dummy")ような何かを行う場合、それは確かに最初のフィールド(著)を返します:

for(IndexableField myField:doc.getFields()){ 
    System.out.println(myField.name()); 
} 

次が印刷されています。私はこのような何かを行う場合は、さらに掘る

FacetFieldのソースコードを見るとは:https://github.com/apache/lucene-solr/blob/branch_6_3/lucene/facet/src/java/org/apache/lucene/facet/FacetField.java

public FacetField(String dim, String... path) { 
super("dummy", TYPE); 

これはバグです:https://github.com/apache/lucene-solr/blob/branch_6_3/lucene/facet/src/java/org/apache/lucene/facet/FacetField.java すべてのファセットフィールドは「ダミー」で作成されているようですか?私の理解あたりとして

答えて

-1

、あなたはそれが「ボブ」として返されるべきである著者の値を取得しようとしています。

FacetField &フィールドのLuceneのフィールドの二つの異なるタイプであり、それらは異なる方法でデータを格納します。 FacetFieldはFieldクラスの子クラスです。フィールドを初期化するには、フィールドの名前が必要です。&ブール値は、フィールドを取得するかどうかを示します。

パブリッククラスFacetFieldはフィールド

そして、ここでは、フィールドの初期化

フィールドpathField =新しいStringField( "パス"、file.toString()、 フィールドの一例で延びています。 Store.YES);
doc.add(pathField);

ここで、ドキュメントを保存するには、このようにする必要があります。

SolrInputDocument doc = new SolrInputDocument();
String id = "1";
文字列の著者= "Erick";
文字列text = "私はSolrの本が好きです";
doc.addField( "id"、id);
doc.addField( "author"、title);
doc.addField( "text"、text);このlinkをreverくださいSolrjを使用して検索&をIndeingのSolrをundertandするために

こちらがお役に立てば幸いです。

+0

彼はLuceneのクラスFacetFieldに関する具体的な質問をしています - それは本当にSolrJに関連していないですし、私の知る限りのSolrとの統合? – MatsLindh

+0

ありがとう、私は訂正を追加します:) –

1

私は同じ問題に直面しました。もしあなたが上記の文書を書いて検索でそれを取得するなら、FacetFieldsは実際に文書の一部として保存されていないことがわかります。さらに、FacetFieldの値を検索しても機能しません(結果が0になります)。フィールドがタクソノミーとインデックス自体の両方に書き込まれるようなフラグや何かがあった場合はいいかもしれませんが、ドキュメントインデックスには適用されない他のいくつかの属性がありますファセットフィールドを使用するので、混乱を避けるためにそれらを分離しておくだけです。

私はそれを回避する方法は、文書にフィールドを2回書き込むことです:1つはFacetFieldとして、もう1つは必要な属性を持つフィールドです。

例:

Document doc = new Document(); 

// Add facet fields, not stored/searchable, but can be drilled down into 
doc.add(new FacetField("Author", "Bob")); 
... 

// Add other fields 
doc.add(new TextField("Author", "Bob", Store.YES)); 
... 
関連する問題