2012-03-23 9 views
6

私はSolrのハイライトのwiki文書を何度も読んだことがあります。どこでも検索されていますが、私のSolrのインストールでは基本的な強調表示さえできません。私はデモのJetty 6.1サーバーでSolr 3.5を実行しています。この単純なSolrハイライトの試行が失敗するのはなぜですか?

私は250Kのドキュメントを索引付けしており、それらをきれいに検索することができます。

<!-- Highlighting defaults 
    <str name="hl">on</str> 
    <str name="hl.fl">title snippet</str> 
    <str name="f.name.hl.fragsize">0</str> 
    <str name="f.name.hl.alternateField">name</str> --> 

:私は一時的に、彼らがこの問題を引き起こしていないことを確認するsolrconfig.xmlの「強調表示のデフォルトを」コメントアウトしているが、私のドキュメントフィールドの定義を設定する以外に、Solrの構成のほとんどは「在庫」です私のURLクエリーストリングはとても簡単です。私は多くのバリエーションを試してみたが、ここでは最も基本的なクエリを返すと私の最新されています。ここでは

hl=on&hl.fl=title&indent=on&version=2.2&q=toyota&fq=&start=0&rows=1&fl=*%2Cscore 

は、結果のXMLです:

<?xml version="1.0" encoding="UTF-8"?> 
<response> 

<lst name="responseHeader"> 
    <int name="status">0</int> 
    <int name="QTime">32</int> 
    <lst name="params"> 
    <str name="explainOther"/> 
    <str name="indent">on</str> 
    <str name="hl.fl">title</str> 
    <str name="wt"/> 
    <str name="hl">true</str> 
    <str name="version">2.2</str> 
    <str name="rows">1</str> 
    <str name="fl">*,score</str> 
    <str name="start">0</str> 
    <str name="q">toyota</str> 
    <str name="qt"/> 
    <str name="fq"/> 
    </lst> 
</lst> 
<result name="response" numFound="9549" start="0" maxScore="0.9960097"> 
    <doc> 
    <float name="score">0.9960097</float> 
    <str name="id">2-33-200</str> 
    <str name="title">1992 Toyota Camry 2.2L CV Boots</str> 
    </doc> 
</result> 
<lst name="highlighting"> 
    <lst name="2-33-200"/> 
</lst> 
</response> 

私はさらに、この問題をデバッグするにはどうすればよいですか?ありがとう!

ここでは、<highlighting>セクションは、solrconfig.xmlです。私が述べたように、それは在庫です。それは問題になるかもしれませんが、私はSolrには新しく、強調表示の機能にまだ精通していません(明らかに)。

<highlighting> 
    <!-- Configure the standard fragmenter --> 
    <!-- This could most likely be commented out in the "default" case --> 
    <fragmenter name="gap" 
       default="true" 
       class="solr.highlight.GapFragmenter"> 
    <lst name="defaults"> 
     <int name="hl.fragsize">100</int> 
    </lst> 
    </fragmenter> 

    <!-- A regular-expression-based fragmenter 
     (for sentence extraction) 
    --> 
    <fragmenter name="regex" 
       class="solr.highlight.RegexFragmenter"> 
    <lst name="defaults"> 
     <!-- slightly smaller fragsizes work better because of slop --> 
     <int name="hl.fragsize">70</int> 
     <!-- allow 50% slop on fragment sizes --> 
     <float name="hl.regex.slop">0.5</float> 
     <!-- a basic sentence pattern --> 
     <str name="hl.regex.pattern">[-\w ,/\n\&quot;&apos;]{20,200}</str> 
    </lst> 
    </fragmenter> 

    <!-- Configure the standard formatter --> 
    <formatter name="html" 
      default="true" 
      class="solr.highlight.HtmlFormatter"> 
    <lst name="defaults"> 
     <str name="hl.simple.pre"><![CDATA[<em>]]></str> 
     <str name="hl.simple.post"><![CDATA[</em>]]></str> 
    </lst> 
    </formatter> 

    <!-- Configure the standard encoder --> 
    <encoder name="html" 
      class="solr.highlight.HtmlEncoder" /> 

    <!-- Configure the standard fragListBuilder --> 
    <fragListBuilder name="simple" 
        default="true" 
        class="solr.highlight.SimpleFragListBuilder"/> 

    <!-- Configure the single fragListBuilder --> 
    <fragListBuilder name="single" 
        class="solr.highlight.SingleFragListBuilder"/> 

    <!-- default tag FragmentsBuilder --> 
    <fragmentsBuilder name="default" 
        default="true" 
        class="solr.highlight.ScoreOrderFragmentsBuilder"> 
    <!-- 
    <lst name="defaults"> 
     <str name="hl.multiValuedSeparatorChar">/</str> 
    </lst> 
    --> 
    </fragmentsBuilder> 

    <!-- multi-colored tag FragmentsBuilder --> 
    <fragmentsBuilder name="colored" 
        class="solr.highlight.ScoreOrderFragmentsBuilder"> 
    <lst name="defaults"> 
     <str name="hl.tag.pre"><![CDATA[ 
      <b style="background:yellow">,<b style="background:lawgreen">, 
      <b style="background:aquamarine">,<b style="background:magenta">, 
      <b style="background:palegreen">,<b style="background:coral">, 
      <b style="background:wheat">,<b style="background:khaki">, 
      <b style="background:lime">,<b style="background:deepskyblue">]]></str> 
     <str name="hl.tag.post"><![CDATA[</b>]]></str> 
    </lst> 
    </fragmentsBuilder> 

    <boundaryScanner name="default" 
        default="true" 
        class="solr.highlight.SimpleBoundaryScanner"> 
    <lst name="defaults"> 
     <str name="hl.bs.maxScan">10</str> 
     <str name="hl.bs.chars">.,!? &#9;&#10;&#13;</str> 
    </lst> 
    </boundaryScanner> 

    <boundaryScanner name="breakIterator" 
        class="solr.highlight.BreakIteratorBoundaryScanner"> 
    <lst name="defaults"> 
     <!-- type should be one of CHARACTER, WORD(default), LINE and SENTENCE --> 
     <str name="hl.bs.type">WORD</str> 
     <!-- language and country are used when constructing Locale object. --> 
     <!-- And the Locale object will be used when getting instance of BreakIterator --> 
     <str name="hl.bs.language">en</str> 
     <str name="hl.bs.country">US</str> 
    </lst> 
    </boundaryScanner> 
</highlighting> 

編集最初に私の「タイトル」フィールドには、I =「true」をtermPositions真(変更なし/まだありませんハイライト)に設定する、ともtermVectorsテストしているので、インデックス付き=「false」をに設定したが、 = "true" termOffsets = "true" ...まだ効果はありません。

(私はthis post to SOを読みに基づいてこれらを試してみました。)そして、ここで今のように私の "タイトル" フィールドの定義です:最初は私が始めた

<field name="title" type="string" indexed="true" stored="true" required="true" termVectors="true" termPositions="true" termOffsets="true" /> 

:編集

<field name="title" type="string" indexed="false" stored="true" required="true" /> 

私は今もこの定義を試しました:

<field name="title" type="text_general" indexed="true" stored="true" required="true" termVectors="true" termPositions="true" termOffsets="true" /> 

と強調表示の変更は、まだ動作しません。私text_general定義は、Solrのデモに付属しているデフォルトのいずれかになります。

<!-- A general text field that has reasonable, generic 
     cross-language defaults: it tokenizes with StandardTokenizer, 
removes stop words from case-insensitive "stopwords.txt" 
(empty by default), and down cases. At query time only, it 
also applies synonyms. --> 
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> 
     <!-- in this example, we will only use synonyms at query time 
     <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/> 
     --> 
     <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
    <analyzer type="query"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> 
     <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
</fieldType> 

編集私は今もまだハイライトをWhitespaceTokenizerFactory代わりStandardTokenizerFactoryのを使用していない、とtext_en_splittingのFIELDTYPE、と再インデックスのタイトルを試してみました。それが価値があるかどうか、私はdebugQuery = onによるLuceneQParserである標準クエリパーサーを使用しています。

最後に! @javannaに助けてくれてありがとう。私は多くの実験を行いました.2つの主な取り組みは次のとおりです。

  1. トークン化フィールドタイプを使用する必要があります。文字列fieldtypeは機能しません。 indexed = trueまたはtermVectors = trueにする必要はないようですが、フィールドタイプをトークン化する必要があります。
  2. フィールドには、大文字と小文字の区別があります。トークン化に失敗することに加えて、私は開発中に自分のフィールドのケースを変更し、hl.fl(ハイライトフィールド)の定義を変更するのを忘れて、強調表示が機能しないようにしました。
  3. 各設定変更の間にインデックスを再作成してください。安全のため、インデックスからすべてのドキュメントを削除して、最初から再構築していましたが、それは必要ではないかもしれません。

私の定義は、今のように表示されます。

<field name="Title" type="text_general" indexed="false" stored="true" required="true" /> 

そして、私のsolrconfig.xmlは、このセットを持って:あなたはハイライトを作っている方法が良いと思われる

<str name="hl">on</str> 
<str name="hl.fl">Title</str> 
+0

schema.xmlにタイトルフィールドの定義を投稿できますか? – javanna

+0

本当に、残念私は最初にそれを残しました。 –

+0

ありがとう!もう一つのこと:schema.xmlの文字列fieldTypeの定義は何ですか?デフォルトのものか別のものか? – javanna

答えて

11

が、あなたのsolrconfig.xml少し乱雑に見えます。残念ながら、あなたが取った例は、基本的にすべての利用可能なオプションを使用しています。私はあなたがそれらを必要としないと思います。デフォルトと異なるものが必要な場合を除き、私はすべての強調表示の設定とデフォルトのパラメータをコメントアウトしています。それから私は必要なURLパラメータで遊んでいます。ちょうど始めるには:hl = onとhl.fl = title。適切なパラメータを見つけたら、デフォルトとして設定することができます。

あなたのタイトルfieldTypeが与えられていると、デフォルトの文字列型定義を変更しない限り、トークン化されていない可能性があります。その場合、クエリはタイトルフィールドと一致しません。そのため、強調表示されません。多分edismax(またはdismax)を使用していますか?はいの場合、あなたのqfパラメータは何ですか?トヨタの用語があなたのクエリと一致する別のフィールドにある可能性はありますか? edismaxを使用している場合は、q = title:toyota ansを検索して結果が得られるかどうかを調べることができます。

あなたの一致がどこで有効になっているかを確認して、debugQuery = onでデバッグ出力を確認することもできます。

UPDATE
私はあなたがtext_generalにタイトルFIELDTYPEを変更しましたが、その種類は空白にトークン化されていないため、これは何も変わりません。 「そう、あなたが勝った、すべてのデータのインデックスを再作成することを忘れないでください。その後

<tokenizer class="solr.WhitespaceTokenizerFactory"/> 

:あなたは語っていない、まだあなたは私が正しいならば、とにかくあなたの代わりにStandardTokenizerFactoryWhitespaceTokenizerFactoryを使用する必要があり、どのようなクエリのパーサを使用しています何か変化が見られる。 基本的には、toyota whateverのようなものを空白文字でトークン化せずにインデックスすると、toyotaの検索結果は得られません。一致しないため、そのフィールドにtoyotaが強調表示されません。私の前提は、dismaxまたはedismaxクエリーパーサーを使用して複数のフィールドで検索していて、そのうちのいくつかはタイトルと一致しないので、結果は得られるが、選択した唯一のフィールドであるtitle強調表示する。 toyotaの検索結果を投稿できますか? toyotaという用語は、title以外のフィールドにありますか?

+0

これは厄介なようですが、それはSolr 3.5のデフォルト設定です。 :)デフォルトの設定でない限り、私はdismaxまたはedismaxを使用していません。月曜日に仕事に戻ったら、私はあなたの提案をお試しになります、ありがとう! –

+2

@ MasonG.Zhwiti私はこれを言うべきではありませんが、... solrの例を信じてはいけません:)本当に、SOlrの仕組みを理解するには、ほとんど空のスキーマから始まり、構成をきれいにする方がいいです。私がもっと助けることができるかどうか私に教えてください! – javanna

+0

私はまだ何かもっとベアボーンに設定をリセットしていますが、これまでは、termVector = trueの有無にかかわらず、タイトルのfieldTypeをtext_generalに変更しようとしましたが、強調表示に関しては何もしていません。 –

関連する問題