Symfoware

Symfowareについての考察blog

Solrを使用したblog記事検索サンプルのソース(検索結果解析SAX Handler)

Solrを使用したblog記事検索サンプル
で紹介したアプリケーションの検索結果解析SAX Handlerのソースです。
そのほかのソースはこちら。

Solrを使用したblog記事検索サンプルのソース(メイン画面)
Solrを使用したblog記事検索サンプルのソース(新規登録画面)
Solrを使用したblog記事検索サンプルのソース(Solrアクセス部分)



package com.fc2.blog68.symfoware.solr;

import java.util.*;

import org.xml.sax.*;
import org.xml.sax.helpers.*;

public class SolrResultHandler extends DefaultHandler {

    private List<Map<String, String>> table = null;
    private Map<String, String> row = null;
    private String[] keys = null;
    private String nameTmp = null;
    
    public SolrResultHandler(String[] keys) {
        table = new ArrayList<Map<String, String>>();
        this.keys = keys;
    }
    
    public void startElement(String uri, String localName, String qName,
            Attributes attributes) {
        nameTmp = null;
        
        //docタグの間に検索結果のデータが含まれる
        if ("doc".equals(qName)) {
            row = new HashMap<String, String>();
            return;
        }
        
        
        if (attributes.getLength() != 0) {
            //nameにフィールド名が含まれる
            for (int i = 0; i < attributes.getLength(); i++) {
                if ("name".equals(attributes.getQName(i))){
                    nameTmp = attributes.getValue(i);
                }
            }
        }
    }
    
    public void characters(char[] ch, int offset, int length) {
        if ((row != null) && (nameTmp != null)) {
            //データが長い場合、複数に分割してテキストデータが送られてくる
            if (row.containsKey(nameTmp)) {
                row.put(nameTmp, row.get(nameTmp) + new String(ch, offset, length));
            } else {
                row.put(nameTmp, new String(ch, offset, length));
            }
        }
    }

    public void endElement(String uri, String localName, String qName) {
        if ("doc".equals(qName)) {
            table.add(row);
            row = null;
        }
    }
    
    //テーブルに表示する都合上、Stringの二次元配列に変換
    public String[][] getResult() {
        String[][] reuslt = new String[table.size()][keys.length];
        for (int i = 0; i < table.size(); i++) {
            row = table.get(i);
            for (int j = 0; j < keys.length; j++) {
                if (row.containsKey(keys[j])) {
                    reuslt[i][j] = row.get(keys[j]);
                }
            }
        }
        
        return reuslt;
    }
}








関連記事

テーマ:データベース - ジャンル:コンピュータ

  1. 2009/10/30(金) 12:50:22|
  2. apache solr
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
前のページ 次のページ