2016-12-22 9 views
1

私はsolrを使ってインデックスを作成しました。次のコードを実行しようとしていますが、カウントにゼロの結果が得られます。サーチャーが結果を返さない理由は何ですか?

DirectoryReader dr = DirectoryReader.open(FSDirectory.open(new File(indexDir).toPath())); 
IndexSearcher searcher = new IndexSearcher(dr); 

System.out.println(dr.maxDoc()); // Shows 2000000 
Query query = new FieldValueQuery("table"); 
CollectionStatistics stats = searcher.collectionStatistics("table"); 
System.out.println(stats.docCount()); // Shows 2000000 

System.out.println(searcher.count(query)); //Shows 0, should be 2000000 

のschema.xmlに提出されたテーブルの定義は次のとおりです。

<field name="table" type="string" indexed="true" stored="true" required="true" multiValued="false"/> 

インデックスにドキュメントを追加するためのコードは次のとおりです。

SolrInputDocument doc = new SolrInputDocument(); 
doc.addField("table", "job", 1.0f); 
solrclient.add(doc); 
solrclient.commit(); 

すべてのアイデア、なぜこれができました起こっている? FieldValueQueryでの検索が正しい結果を返していないのはなぜですか?

は事前にありがとうございました。

+0

ドキュメントのインデックスを作成しますか?あなたのschema.xmlは何ですか? – root545

+0

私は質問を編集しましたので、あなたは今すべての詳細を持っています – Roxana

+0

https://lucene.apache.org/core/6_3_0/core/org/apache/lucene/search/FieldValueQuery.htmlによると、LeafReader .getDocsWithField()メソッドは、docvaluesに依存します。現在のスキーマバージョンでデフォルトで有効になっているかどうかは不明です。 – MatsLindh

答えて

0

コードプロバイダをテストするために、私は既存のインデックスに対してそれを実行し、フィールドの名前をインデックスの異なるタイプのフィールドに置き換えようとしました。 は、私は、次のschema.xmlでインデックスを持っている:

DirectoryReader dr = DirectoryReader.open(FSDirectory.open(directory.toPath())); 
    IndexSearcher searcher = new IndexSearcher(dr); 
    Query query = new FieldValueQuery("author"); 
    System.out.println(searcher.count(query)); 

と結果が0の文書だった:私は、次のようにあなたのコードを試してみました

<field name="tag" type="string" indexed="true" stored="true" multiValued="true" docValues="true" /> 
<field name="author" type="string" indexed="true" stored="true" multiValued="true" /> 

。 は、その後、私は次のようにFieldValueQueryでそれらを置き換え、(サブセット私は上記コピーされた)私のスキーマ内の他のフィールドで試してみました:

Query query = new FieldValueQuery("tag"); 

、正しい回数(私にとって47000)現れました。 searcher.count はあなたの問題を解決しますので 次のようにスキーマを変更し、DocValuesに依存することを意味

<field name="table" type="string" indexed="true" stored="true" required="true" multiValued="false" docValues="true"/> 

あなたがしたくない場合、または次のことができますスキーマを変更しないと、いつも古い方法で文書を数えることができます:

searcher.search(query,collector); 
int count = collector.getTotalHits(); 
関連する問題