lucene フィールド値の表示について
Luceneの検索で同じフィールド値を複数設定したドキュメントに対してサーチを行いヒットした場合について,項目の表示をテストしていたのですが,最初にセットしたフィールド内容しか表示しません。
ヒットしたフィールド値をすべて表示させる方法を教えてくださいませ
以下ソースです。
private static final String F_SHOP = "shop";
private static final String F_PRICE = "price";
private static final String[] SHOPS = { "ショップ1", "ショップ1", "ショップ1", "ショップ1", "ショップ1", "ショップ1", "ショップ1", "ショップ1", "ショップ1", "ショップ1", "ショップ1", "ショップ1", "ショップ1", "ショップ1" };
private static final String[] PRICES = { "20080520 20080620", "20080420 20080620", "20080520 20080620", "20080420 20080620", "20080320 20080620", "20080420 20080620", "20080420 20080620", "20080320 20080620", "20080420 20080620", "20080420 20080620", "20080420 20080620", "20080420 20080620", "20080420 20080620", "20080420 20080620" };
private static Directory dir;
private static WhitespaceAnalyzer analyzer = new WhitespaceAnalyzer();
public static void main(String[] args) throws IOException, ParseException {
makeIndex();
searchIndex();
dir.close();
}
private static void makeIndex() throws IOException{
dir = new RAMDirectory();
IndexWriter writer = new IndexWriter( dir, analyzer, true );
for( int i = 0; i < SHOPS.length; i++ ){
Document doc = new Document();
doc.add( new Field( F_SHOP, SHOPS[i], Store.YES, Index.UN_TOKENIZED ) );
String[] s = PRICES[i].split(" ");
for(String ss: s ){
doc.add( new Field( F_PRICE, ss, Store.YES, Index.UN_TOKENIZED ) );
}
writer.addDocument( doc );
}
writer.close();
}
private static void searchIndex() throws IOException, ParseException{
QueryParser qp1 = new QueryParser( F_SHOP, analyzer );
QueryParser qp2 = new QueryParser( F_PRICE, analyzer );
Query query1 = qp1.parse( "ショップ1" );
Query query2 = qp2.parse( "20080620" );
BooleanQuery query3 = new BooleanQuery();
query3.add(query1,Occur.MUST);
query3.add(query2,Occur.MUST);
IndexSearcher searcher = new IndexSearcher( dir );
Hits hits = searcher.search( query2 );
for( int i = 0; i < hits.length(); i++ ){
Document doc = hits.doc( i );
float score = hits.score( i );
System.out.println( score + "\t" + doc.get( F_SHOP ) + "\t" + doc.get( F_PRICE ) );
}
searcher.close();
}
実行結果:
0.5818795 ショップ1 20080520
0.5818795 ショップ1 20080420
0.5818795 ショップ1 20080520
0.5818795 ショップ1 20080420
0.5818795 ショップ1 20080320
0.5818795 ショップ1 20080420
0.5818795 ショップ1 20080420
0.5818795 ショップ1 20080320
0.5818795 ショップ1 20080420
0.5818795 ショップ1 20080420
0.5818795 ショップ1 20080420
0.5818795 ショップ1 20080420
0.5818795 ショップ1 20080420
0.5818795 ショップ1 20080420
望んでいる実行結果:
0.5818795 ショップ1 20080620
0.5818795 ショップ1 20080620
0.5818795 ショップ1 20080620
0.5818795 ショップ1 20080620
0.5818795 ショップ1 20080620
0.5818795 ショップ1 20080620
0.5818795 ショップ1 20080620
0.5818795 ショップ1 20080620
0.5818795 ショップ1 20080620
0.5818795 ショップ1 20080620
0.5818795 ショップ1 20080620
0.5818795 ショップ1 20080620
0.5818795 ショップ1 20080620
0.5818795 ショップ1 20080620
よろしくお願いします。
お礼
ありがとうございます。