SolrカスタムQuery Paserを使用します。

10411 ワード

出所:http://blog.chenlb.com/2010/08/solr-use-custom-query-parser.html
SolrデフォルトのQuery Paserで生成されたQueryは一般的に「フレーズクエリ」であり、正確な結果だけが検索されます。ほとんどの場合、私たちは単語を区切ったボアQueryが必要です。一年半前にソロはカスタムQuery Parsserを使用します。に関する文章がありました。この方法を使うと、ソロで自分のQuery Paserを使うことができます。
その文章に従って、QParQueryPaserをそれぞれ拡張します。それらをExtLucene QPartSerPlugin、ExtLuceneQParsser、SolQueryParsser ダウンロードとして実現しました。
構成は使用して、sor-1.4-query-parser-extand-011.jarをsour.home/libに置いて、同時にmmseg 4 j-all-1.82-with-dic.jarをsor.homeにも入れて、もちろん他の分詞器もできます。
schema.xmlプラスまたは変更:
  •  name=「textucn」 class=「sor.Text Field」 positionIncrement Gap="100"  
  •     
  •       
  •     
  •    
  •   
  • <!--  ..... -->  
  •   
  •  name="title" type=「textucn」 indexed=「true」 stored=「true」/>  
  •   
  •  title  
  •  <ソロQuery Parsser default Operator=「AND」/>  
  • <fieldType name="text_cn" class="solr.TextField" positionIncrementGap="100">   <analyzer>     <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory"/>   </analyzer> </fieldType>   <!--  ..... -->  <field name="title" type="text_cn" indexed="true" stored="true"/>   <defaultSearchField>title</defaultSearchField>  <solrQueryParser defaultOperator="AND"/> 
    doc-demo.xmlを保存します。
  •   
  • <add>  
  •   
  •   1  
  •   
  •   
  •   
  • <?xml version="1.0" encoding="UTF-8" ?> <add> <doc>   <field name="id">1</field>   <field name="title">        </field> </doc> </add> 
    ソロを起動して、ドキュメントを提出します。
  • 〓〓をスタートさせます ソロ  
  • cd sor.root/example  
  • java -jar スター.jar  
  •   
  • 菵提出索引  
  • cd sor.root/example/exampledocs  
  • java -jar post.jar doc-demo.xml  
  • #   solr cd solr.root/example java -jar start.jar  #     cd solr.root/example/exampledocs java -jar post.jar doc-demo.xml 
    二つの方法で照会します。
    1、extand lucene query parser方式:検索ソロではpaoding中国語で単語を分ける
    結果:
  • <レスポンス>  
  •   
  • <lst name=「レスポンスヘダ」  
  •  <要点 name=「status」>0  
  •  <要点 name=「QTime」>0  
  •  
  •     
  •     
  •   
  •     
  •    
  •   
  •  name=「レスポンス」 numFound="1" start="0"  
  •    
  •   1  
  •   
  •    
  •   
  • <lst name="debug"  
  •  
  •  
  •    
  •    
  •    
  •   
  •   
  • <?xml version="1.0" encoding="UTF-8"?> <response>  <lst name="responseHeader">  <int name="status">0</int>  <int name="QTime">0</int>  <lst name="params">   <str name="debugQuery">on</str>   <str name="indent">on</str>   <str name="q">      </str>   <str name="defType">extlucene</str>  </lst> </lst> <result name="response" numFound="1" start="0">  <doc>   <str name="id">1</str>   <str name="title">        </str>  </doc> </result> <lst name="debug">  <str name="rawquerystring">      </str>  <str name="querystring">      </str>  <str name="parsedquery">+title:   +title:   +title:  </str>  <str name="parsedquery_toString">+title:   +title:   +title:  </str>  <str name="QParser">ExtLuceneQParser</str> </lst> </response> 
    2、ソロのデフォルトquery parserのクエリで生命の起源を研究するを調べます。
    結果:
  • <レスポンス>  
  •   
  • <lst name=「レスポンスヘダ」  
  •  <要点 name=「status」>0  
  •  <要点 name=「QTime」>0  
  •  
  •     
  •     
  •     
  •   
  •   2.2  
  •   10  
  •    
  •   
  •  name=「レスポンス」 numFound="0" start=「0」/>  
  • <lst name="debug"  
  •  
  •  
  •    
  •    
  •    
  •   
  •   
  • <?xml version="1.0" encoding="UTF-8"?> <response>  <lst name="responseHeader">  <int name="status">0</int>  <int name="QTime">0</int>  <lst name="params">   <str name="debugQuery">on</str>   <str name="indent">on</str>   <str name="start">0</str>   <str name="q">      </str>   <str name="version">2.2</str>   <str name="rows">10</str>  </lst> </lst> <result name="response" numFound="0" start="0"/> <lst name="debug">  <str name="rawquerystring">      </str>  <str name="querystring">      </str>  <str name="parsedquery">PhraseQuery(title:"        ")</str>  <str name="parsedquery_toString">title:"        "</str>  <str name="QParser">LuceneQParser</str> </lst> </response> 
    二つの結果を比較:
    1、最初はdebug出力QPaserがExtLuceneQPaserで、先ほどインストールした拡張です。そして、内容を検索できます。BooleanQueryです。
    2、2番目のdebug出力のQParsserはLuceneQParsserで、内容が検索できない。なぜなら、クエリをPhraseQueryに解析して、それらは必ず続けなければならないからです。
    ソースの使用説明(readme.txt内)、生命の起源を研究する
    copy exampleディレクトリはsor.root(e:/apphe-sors-1.4.1)にあります。
    cd sour.root/example java-jar start.jar
    cd sour.root/examplediocs java-jar post.jar doc-demo.xml
    2つのリンクを比較:
    http://localhost:8983/solr/select/?q=%E7%A0%94%E7%A9%B6%E7%94%9F%E5%91%BD%E8%B5%B7%E6%BA%90&defType=extlucene&indent=on&debugQuery=on 上にリンクされているパラメータは、スタンダードハンドルのdefaultsに追加できます。
  •  name=「standard」 class=「sors.Search Handler」 default=「true」  
  •     
  •    
  •        
  •        
  •      
  •   
  •   <requestHandler name="standard" class="solr.SearchHandler" default="true">     <!-- default values for query parameters -->      <lst name="defaults">        <str name="echoParams">explicit</str>        <str name="defType">extlucene</str>      </lst>   </requestHandler> 
    通常のsor query parserhttp://localhost:8983/solr/select/?q=%E7%A0%94%E7%A9%B6%E7%94%9F%E5%91%BD%E8%B5%B7%E6%BA%90&indent=on&debugQuery=on
    この問題は多くのネットユーザーを悩ませている。この文章はご参考までにアップロードします。