SolrJの使用


英語:http://wiki.apache.org/solr/Solrj#Adding_Data_to_Solr
日本語:http://wiki.chenlb.com/solr/doku.php?id=solrj
 
Solrは独立した企業級検索アプリケーションサーバであり、それはWeb-serviceと似たAPIインターフェースを提供している。ユーザーはhttp要求を通じて、検索エンジンサーバに一定のフォーマットのXMLファイルを提出し、インデックスを生成することができます。Http G Solret操作により検索要求を提出し、XML形式の戻り結果を得ることもできる。
Solrjは、SolrのJavaクライアントにアクセスし、Solrインデックスを追加、更新、および照会するインターフェースを提供する。 
Commons Http SolServer
    Commons HttpSolrServerはHTTPClientを使ってsorサーバと通信しています。
String url="http://localhost:8983/solr";
SolServer server=new Commons HttpSolrServer;
 
   Commons HttpSolrServerはスレッドセキュリティであり、Commons HttpSolrServerの例を繰り返し使用することを提案しています。
  セッティングXMLResponseParsser
     sorlr Jは現在、標準のフォーマットとしてバイナリのフォーマットを使用しています。ソロ1.2のユーザには、表示された設定によってXMLフォーマットが使用される。
   
server.set Parsser(new XMLResonseParsser();
 
   Changing other Connection Settings
      Commons Http SorlrServerはリンク属性の設定を許可します。
     
String url="http://localhost:8983/solr「
Commons Http SolrServer=new Commons Http SolrServer;
server.set SoTimeout(1000)//socket read timeout
server.set Connection Timeout(100)
server.set Default MaxConnection PerHost(100)
server.set MaxTotal Connection(100)
server.set Follow Redirects(false)//defaults to false
//allowCommpression defaults to false.
//Server side must support gzip or deflate for this to have any effect.
server.set AllowCompration(true)
server.setMaxRetries(1)//defaults to 0.>>1 not recommanded.
 
EmboddedSolServer
      EmbodSorrServerはCommons Http SorlrServerと同じインターフェースを提供しています。http接続は必要ありません。
     
//注意、下の属性もjvmパラメータに設定できます。
System.set Property(「sor.sor.home」、「/home/sharlinsmanner/work/Obranch-1.3/example/sour」);
CoreCoreContiner.Initializer=new CoreCoreContiner.Initializer()
CoreContiner coreContiner=initializer.initialize()
EmbodedSolrServer=new EmbodSolrServer;
  
   Multicare特性を使いたいなら、このように使ってもいいです。
  
File home=new File(getSolrHome);
File f=new File(home,「sor.xml」);
multicare.load(getSolHome(),f);
EmboddedSolrServer=new EmbodSolrServer(multicare);
 
    あなたがプロジェクトにsorサービスを組み込むなら、それはいい選択です。httpを使ってもいいですか?同じインターフェースを提供します。
  使い方
    ソロjは、要求をソロサーバに提出し、応答を受信するための拡張可能なフレームワークとして設計される。
    私たちはすでに最も一般的ないくつかのコマンドをsorServerクラスに封入しました。
 
   Adding Data to Solr
  •     まずserverの実例を得る必要があります。 
  • ソウルセーバー=get SolrServer()
  • もし、あなたがリモートのsorServerを使ったら、このようにget SolrServerを実現するかもしれません。      
  • public SolrServer getSolrServer()
    //the instance can be reused
    return new Commons Http SolServer()
    )
     
  • もしあなたが地元のsorServerを使っているなら、このようにget SolrServerを実現することができます。      
  • public SolrServer getSolrServer()
    //the instance can be reused
    return new EmbodSolServer()
    )
     
  • データを追加する前に既存のインデックスをクリアしたいなら、そうしてもいいです。
            
    server.deleteByQuery(「*」)//delete everrything
     
  • document
  • を構築します。
             
    SolrInput Dock doc 1=new SolrInput Dockment()
    doc 1.addField(「id」、「id 1」、1.0 f)
    doc 1.addField(「name」、「doc 1」、1.0 f)
    doc 1.addField(「price」、10)
     
  • は、他の文書を構成しており、各文書はソロに提出することができるが、大量提出はより効率的である。どれもSolrServerに対する要求はhttp要求です。もちろんEmbodSolServerにとっては違います。     
  • SolrInput Docment doc 2=new SolrInput Dockment()
    doc 2.addField(「id」、「id 2」、1.0 f)
    doc 2.addField(「name」、「doc 2」、1.0 f)
    doc 2.addField(「price」、20)
     
  • は、1つの文書のセット
  • を構成する。
            
    Collection<SolInput Dcument>docs=new ArayList<SolrInput Dcument>();
    docs.add(doc 1)
    docs.add(doc 2)
     
  • は、documentsをsor
  • に提出する。
    server.add(docs)
     
  • commt
  • を提出します。
    server.co mmit()
  • documentsを追加した後、すぐにcomitを作って、あなたのプログラムを書きに来てもいいです。
  • UpdateRequest req=new UpdateRequest()
    req.setAction(UpdateRequest.ACT ION.COMMIT、false、false);
    req.add(docs)
    UpdateResonse rsp=req.process;
     
     
    Streaming documents for an udate
     
    多くの場合、Streaming UpdateSolrServerも有用です。もしあなたが使うのがsor 1.4以上のバージョンなら、下のコードが使えるかもしれません。下記のような方法は使いやすいです。特にサーバーにデータを提出する時に。
    ..
     
    CommonsHttpSolrServer server = new CommonsHttpSolrServer();
    Iterator<SolrInputDocument> iter = new Iterator<SolrInputDocument>(){
         public boolean hasNext() {
            boolean result ;
            // set the result to true false to say if you have more documensts
            return result;
          }
    
          public SolrInputDocument next() {
            SolrInputDocument result = null;
            // construct a new document here and set it to result
            return result;
          }
    };
    server.add(iter);
      
    you may also use the addBens beansIter)method to write pojos 
    Directly adding POJOs to Solr
  •    javaコメントを使ってjava beanを作成します。@Fieldは、ドメインまたはsetter方法で使用することができる。ドメイン名がbeanの名前と異なる場合、javaのコメントに別名を記入します。具体的には、以下のドメインcategoriesを参照してください。          
  • import org.apache.sorc.lient.sorj.beans.Field;
    public class Item{
    @Field
    String id
    @Field(「cat」)
    String[]categories;
    @Field
    Listfeature;
    )
     
  • java注釈は、以下の例:
  •         
    @Field(「cat」)
    public void set Category(String[]c){
    this.categories=c
    )
              ここでは相対的な、getメソッド(java注釈が付けられていない)が属性を読み取ります。
  • Get an instance of server
  • ソウルセーバー=get SolrServer()
     
  • バーンのインスタンス
  • を作成します。
            
    Item item=new Item()
    item.id=「one」
    item.categories=new String[]{aaa]、「bb」、「ccc」;
     
  • ソロに追加          
  • server.addBen(item)
     
  • は、複数のbeanをソロ
  • に提出する。
         
    Listbeans;
    //add Item object to the list
    server.addBens(beans)
        注意:SolrServerを繰り返し使用すると性能が向上します。
      Reading Data from Solr
  •    sorserverのインスタンスを取得する
  •             
    ソウルセーバー=get SolrServer()
     
  •    SolQueryを作成
         
    SolQuery query=new SolQuery()
    query.setQuery(*:*)
    query.addSortField(「price」、SolQuery.ORDER.asc)
     
  •    クエリ要求をサーバに送信する
  •     
    Query Resonse rsp=server.query;
     
  •    結果を取得します
  •     
    SolrDcumentList docs=rsp.gets Results()
     
  •    javabeanで結果を取得するには、このjavabeanは前の例のようにjavaコメントが必要です。
    Listbeans=rsp.getBens(Item.class)
     
  •     高級な使い方
           sorJはAPIのセットを提供しています。クエリーの作成を手伝ってくれます。以下はfaceted queryの例です。
    ソウルセーバー=get SolrServer()
    SolQuery sorQuery=new SolQuery()
    setQuery(「ipod」)
    set Facet(true)
    set Facet MinCount(1)
    set Facet Limit(8)
    addFacetField(「category」)
    addFacetField(「inStock」)
    Query Response rsp=server.query(sorQuery)
     すべてのsetter/add方法は自分の実例を返します。だからあなたが見ているように、上の使い方はチェーン式です。