Ich konfigurierte Solr 4.10 (auch 5.3) mit highlighting functionality. Es funktioniert gut mit den meisten Wörtern, aber ich fand einige Wörter, die "nicht" erlauben, Hervorhebungen zu erlauben, dh solr gibt die erforderlichen Dokumente zurück, aber hebt einige von ihnen nicht hervor.Solr markiert einige Wörter nicht
Was kann einen solchen Effekt verursachen?
solrconfig.xml
<requestHandler name="/select" class="solr.SearchHandler">
<lst name="defaults">
<str name="wt">json</str>
<str name="indent">true</str>
<str name="defType">edismax</str>
<str name="bf">product(concount)</str>
<str name="df">text bio text_syn text_syn_other</str>
<str name="qf">
text^25 bio^16 text_syn^8 text_syn_other^3
</str>
<str name="hl">on</str>
<str name="hl.fl">text bio text_syn text_syn_other</str>
<str name="hl.preserveMulti">true</str>
<str name="hl.encoder">html</str>
<str name="f.text.hl.fragsize">100</str>
<str name="hl.snippets">20</str>
<arr name="components">
<str>highlight</str>
</arr>
</lst>
schema.xml
<fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.PatternTokenizerFactory" pattern="[\s\n,/\\]" />
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
<filter class="solr.PorterStemFilterFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms_abbr.txt" ignoreCase="true" expand="false"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.PatternTokenizerFactory" pattern="[\s\n,/\\]" />
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
</fieldType>
<fieldType name="text_en_syn" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.PatternTokenizerFactory" pattern="[\s\n,/\\]" />
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
<filter class="solr.PorterStemFilterFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="false"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.PatternTokenizerFactory" pattern="[\s\n,/\\]" />
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
</fieldType>
<fieldType name="text_en_syn_other" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.PatternTokenizerFactory" pattern="[\s\n,/\\]" />
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
<filter class="solr.PorterStemFilterFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms_other.txt" ignoreCase="true" expand="false"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.PatternTokenizerFactory" pattern="[\s\n,/\\]" />
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
</fieldType>
<field name="text" type="text_en" indexed="true" stored="true" multiValued="false" />
<field name="text_syn" type="text_en_syn" indexed="true" stored="false" multiValued="true" />
<field name="text_syn_other" type="text_en_syn_other" indexed="true" stored="false" multiValued="true" />
<field name="text_exact" type="string" indexed="true" stored="false" multiValued="false" />
<field name="bio" type="text_en" indexed="true" stored="true" multiValued="false" />
<field name="bio_exact" type="string" indexed="true" stored="false" multiValued="false" />
<field name="concount" type="long" indexed="true" stored="true" multiValued="false" />
<field name="concount_exact" type="long" indexed="true" stored="false" multiValued="false" />
<copyField source="text" dest="text_syn"/>
<copyField source="bio" dest="text_syn"/>
<copyField source="text" dest="text_syn_other"/>
<copyField source="bio" dest="text_syn_other"/>
Für die Abfrage http://localhost:8983/solr/select?q=senior
bekam ich docs mit dem Wort senior
, aber Abschnitt solr Reaktion in Hervorhebung dieses Wort ist nicht hervorgehoben.
UPDATE 1: ich herausfinden, dass ich das Wort senior
in meiner synonyms_abbr.txt
-Datei haben, die Linie senior,lead
. Als ich diese Zeile kommentierte oder die Stellen der Wörter, lead,senior
, überraschte, fing das Wort senior
fing an, hervorzuheben. Irgendwelche Ideen ?
UPDATE 2: Wörter aus synonyms.txt
und synonyms_other.txt
werden hervorgehoben normalerweise immer, aber Worte von synonyms_abbr.txt
seltsam verhalten sich wie folgt. Zum Beispiel habe ich die Linie lead,head,senior
in synonyms_abbr.txt
dann
- die Abfragen
http://localhost:8983/solr/select?q=senior
undhttp://localhost:8983/solr/select?q=head
kein Wort markiert, - die Abfrage
http://localhost:8983/solr/select?q=lead
Highlights nicht nur das Wortlead
, sondern auchhead
undsenior
.
Verwenden Sie die Solr-Backend-Funktionalität für eine Analyse der Transformation des Wortes. Ich bin mir nicht sicher, wie das Wort transformiert wird. Es könnte ein stemming Problem sein. Verwenden Sie andernfalls ein anderes Feld, schalten Sie die Transformationen aus und lassen Sie nur den Tokenizer zurück, und markieren Sie dann das entsprechende Feld. – 0xCAFEBABE
@Mher Sind die Wörter, die nicht hervorgehoben werden, Stoppwörter? Oder nur zufällig? –
Ich habe keine Stoppwörter konfiguriert. Die gesamte 'stopwords.txt' Datei ist kommentiert. – Mher