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」/> <add> 1 〓〓をスタートさせます ソロ cd sor.root/example java -jar スター.jar 菵提出索引 cd sor.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"
結果:<レスポンス> <lst name=「レスポンスヘダ」 <要点 name=「status」>0 <要点 name=「QTime」>0 2.2 10 name=「レスポンス」 numFound="0" start=「0」/> <lst name="debug"
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」
この問題は多くのネットユーザーを悩ませている。この文章はご参考までにアップロードします。
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プラスまたは変更:
<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を保存します。<?xml version="1.0" encoding="UTF-8" ?> <add> <doc> <field name="id">1</field> <field name="title"> </field> </doc> </add>
ソロを起動して、ドキュメントを提出します。# 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中国語で単語を分ける
結果:
<?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のクエリで生命の起源を研究するを調べます。結果:
<?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に追加できます。
<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 この問題は多くのネットユーザーを悩ませている。この文章はご参考までにアップロードします。