私は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\"']{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">.,!? 	 </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つの主な取り組みは次のとおりです。
- トークン化フィールドタイプを使用する必要があります。文字列fieldtypeは機能しません。 indexed = trueまたはtermVectors = trueにする必要はないようですが、フィールドタイプをトークン化する必要があります。
- フィールドには、大文字と小文字の区別があります。トークン化に失敗することに加えて、私は開発中に自分のフィールドのケースを変更し、hl.fl(ハイライトフィールド)の定義を変更するのを忘れて、強調表示が機能しないようにしました。
- 各設定変更の間にインデックスを再作成してください。安全のため、インデックスからすべてのドキュメントを削除して、最初から再構築していましたが、それは必要ではないかもしれません。
私の定義は、今のように表示されます。
<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>
schema.xmlにタイトルフィールドの定義を投稿できますか? – javanna
本当に、残念私は最初にそれを残しました。 –
ありがとう!もう一つのこと:schema.xmlの文字列fieldTypeの定義は何ですか?デフォルトのものか別のものか? – javanna