solr 4ハイライトクエリの例:

5624 ワード

public class SolrTestQuery { 	public static void main(String[] args) throws Exception{
	String zkHost = "localhost:9080"; 
        String defaultCollection = "collection1";   
        CloudSolrServer server = new CloudSolrServer(zkHost);  
        server.setDefaultCollection(defaultCollection);
	SolrQuery params = new SolrQuery();  
        String q=" ";
        //the common parameters for all search  
        params.set("q", "content:"+q,"title:"+q);  
        params.set("fl", "*,score");  // field list  
        params.set("start", "0");  
        params.set("rows", "10"); 
        params.setHighlightSimplePre("<em>");
        params.setHighlightSimplePost("</em>");
        params.addHighlightField("title");
        params.addHighlightField("content");
        params.addHighlightField("keywords");
        params.setHighlight(true);
        params.setHighlightFragsize(72);
        params.setHighlightSnippets(3);
        params.setSort("score", ORDER.desc);
        params.setSort("updatetime", ORDER.desc);
        params.set("timeAllowed", "30000"); //miliseconds  
        params.set("wt", "json"); // the response writer type           // !  
        QueryResponse response = null;  
        try {  
            response = server.query(params);  
           	SolrDocumentList results = response.getResults();
                // 
           	Map<String, Map<String, List<String>>> highlightresult=response.getHighlighting();
    		for (int i = 0; i < results.size(); ++i) {
    			SolrDocument document=results.get(i);
    			System.out.println(document.get("id").toString());     			if(highlightresult.get(document.get("id").toString())!=null && highlightresult.get(document.get("id").toString()).get("title")!=null){
    				String t=highlightresult.get(document.get("id").toString()).                                         get("title").get(0);
    				System.out.println(t);
    			}else{
    				System.out.println(document.get("title"));
    			} 
     			if(highlightresult.get(document.get("id").toString())!=null && highlightresult.get(document.get("id").toString()).get("content")!=null){
    				String t=highlightresult.get(document.get("id").toString())
                                         .get("content").get(0);
    				t=t.length()>72 ? t.substring(0, 72) : t;
    				System.out.println(t);
    			}else{
    				System.out.println(document.get("content"));
    			}
     			System.out.println(document.get("score"));
    		}
        } catch (SolrServerException e) {  
            System.err.println(e.getMessage());  
            e.printStackTrace();  
        } catch (Exception e) {  
            System.err.println(e.getMessage());  
            e.printStackTrace();  
        } finally {  
            server.shutdown();  
        }  
   }}

hl.fl:ハイライトフィールド
hl.useFastVectorHighlighter:デフォルトはfalseです.つまり、テキストセグメントの分割は50文字ごとに分割され、この50文字の中でキーワード関連の要約を取ります.要約の長さは100です.後のパラメータ(hf.fragsize)を参照してください.パラメータに値をtrueと指定すると、solrはキーワードのテキスト内のオフセット量に基づいて要約情報を計算します.前提はfieldがtermPositions="true"termOffsets="true"の2つを追加することです.
hl.snippets:ハイライトされた要約のセグメント数を返します.私たちのテキストは一般的に長いので、hl.snippetsの値が1より大きいと、テキストにキーワードが含まれているいくつかのセグメントが返され、デフォルト値が1で、キーワードが最も多く含まれている記述が返されます.solrは複数のセグメントをソートします.
hl.fragsize:要約情報の長さ.デフォルト値は100です.この長さはキーワードが表示される位置を6文字前に移動し、100文字後にテキストを取ります.
hl.boundaryScanner:境界スキャンは、どのようにして要約情報の開始位置と終了位置をハイライトするかです.これは私たちの要約情報の鍵です.私たちのモードのハイライト要約の開始と終了は、ある文のセグメントである可能性があります.
hl.bs.maxScan:キーワードが表示される位置から6文字前に進み、maxScan文字内に1文字が表示されるかどうかを探します
hl.bs.chars:パラメータhl.bs.charsで指定した境界記号.すなわち、ここから要約としての開始オフセットである.前のmaxScan文字に指定された文字が見つからない場合は、開始値でstart、すなわちキーワードの前の6文字とします.
hl.requireFieldMatch:デフォルト値はfalseです.これは、フィールドに一致する可能性がありますが、異なるフィールドをハイライトすることを意味します.もしhl.flはワイルドカードを使用しているので、このパラメータを有効にします.それでも、クエリーがallフィールド(copy-fieldコマンドを使用する可能性がある)の場合、falseに設定すると、検索結果はどのフィールドのクエリーテキストが見つからないかを示すことができます.trueに設定すると、フィールドのクエリー結果が空でない限りハイライトされます.
hl.usePhraseHighlighter:クエリにフレーズ(引用符で囲まれた)が含まれている場合は、フレーズがハイライトされるまで完全に一致することが保証されます.
hl.highlightMultiTerm:ワイルドカードとファジイ検索を使用すると、ワイルドカードに一致するtermがハイライト表示されることを確認します.デフォルトはfalseで、hl.usePhraseHighlighterはtrueにします.
hl.mergeContiguous:trueに設定すると、snippetが重なるとmergeが立ち上がります.
hl.maxAnalyzedChars:ハイライトされた最大文字を検索します.デフォルトは51200です.無効にしたい場合は-1に設定します.
hl.AlternateField:snippetが生成されていない場合(termsマッチングがない場合)は、別のフィールド値を返します.
hl.maxAlternateFieldLength:hl.AlternateFieldがオンの場合、alternateFieldの最大文字長を設定する必要がある場合があります.デフォルトは0です.つまり、制限はありません.したがって、合理的な値は無制限です.
hl.snippets * hl.fragsizeは、結果を返すサイズを一致させることができます.
hl.formatter:置換可能なformattingアルゴリズムを提供する拡張点.デフォルトはsimpleです.これは現在唯一のオプションです.明らかにこれは足りないorgを見てもいいです.apache.solr.highlight.HtmlFormatter.JAvaとsolconfig.xmlのhighlighting要素はどのように構成されているか.注意原文でどの値がハイライトされているかにかかわらず、予め存在するem tagsのように、エスケープされることはないので、偽のハイライトを招くことがある.
hl.fragmenter:これはsolrがfragmentアルゴリズムを制定する拡張点です.gapはデフォルトです.regexは、highlightの境界が正規表現によって決定されることを示す別のオプションです.これは非典型的な高度なオプションです.デフォルト設定とfragmenters(and formatters)がどのように構成されているかを知るにはsolrconfigを参照してください.xmlのhighlightセグメント.
hl.regex.pattern:正規表現のpattern
hl.regex.これはhlです.fragsizeは正規表現の因子に適応するために変化することができる.デフォルト値は0.6です.hlの場合を意味します.fragsize=100でfragmentの大きさは40-160になる.
参考資料:http://wiki.apache.org/solr/HighlightingParameters