2012-01-04 8 views
5

Tengo una búsqueda de sol que devuelve resultados resaltados contextuales que muestran url's y correos electrónicos con un espacio después de períodos - como "www. Google. Com" o "email @ google. Com" ¿Hay alguna forma de apaga esto, para que se muestren normalmente? Gracias.urls y correos electrónicos en solr resultados de búsqueda

Consulta:

/solr/core1/select?q=email&start=0&rows=10&sort=score+desc&fq=%28categories%3A%28*8*%29%29&wt=javabin&version=2 

sección destacado en config:

<searchComponent class="solr.HighlightComponent" name="highlight"> 
<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">250</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[<b class="highlite">]]></str> 
     <str name="hl.simple.post"><![CDATA[</b>]]></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> 
</highlighting> 

Actualizado esquema:

<fieldType name="text" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true"> 
    <analyzer type="index"> 
    <!-- <tokenizer class="solr.WhitespaceTokenizerFactory"/> --> 
    <tokenizer class="solr.UAX29URLEmailTokenizerFactory"/> 
    <!-- in this example, we will only use synonyms at query time 
    <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/> 
    --> 
    <!-- Case insensitive stop word removal. 
     add enablePositionIncrements=true in both the index and query 
     analyzers to leave a 'gap' for more accurate phrase queries. 
    --> 
    <filter class="solr.StopFilterFactory" 
      ignoreCase="true" 
      words="stopwords.txt" 
      enablePositionIncrements="true" 
      /> 
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="0"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> 
    <filter class="solr.PorterStemFilterFactory"/> 
    </analyzer> 

    <analyzer type="query"> 
    <!-- <tokenizer class="solr.WhitespaceTokenizerFactory"/> --> 
    <tokenizer class="solr.UAX29URLEmailTokenizerFactory"/> 
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
    <filter class="solr.StopFilterFactory" 
      ignoreCase="true" 
      words="stopwords.txt" 
      enablePositionIncrements="true" 
      /> 
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> 
    <filter class="solr.PorterStemFilterFactory"/> 
    </analyzer> 
</fieldType> 

campos

<fields> 
..... 
<field name="tease" type="text" indexed="false" stored="true" /> 
<field name="text" type="text" indexed="false" stored="true" /> 
<field name="fulltext" type="text" indexed="true" stored="false" multiValued="true"/> 
</fields> 

<copyField source="text" dest="fulltext"/> 
<copyField source="title" dest="fulltext"/> 
<copyField source="tease" dest="fulltext"/> 
<defaultSearchField>fulltext</defaultSearchField> 
+0

¿Puede usted por favor, agregue la consulta que está utilizando, así como la destacando la configuración de su archivo solconfig.xml? –

+0

Es algo en el extremo tokenizing, porque si busco en la consola de administración y miro el contenido indexado, los espacios adicionales se muestran allí. Hubiera pensado que esta sería una pregunta común, y sería una cuestión de habilitar o deshabilitar algo en la lógica de tokenización. Pero no puedo decir lo que sería. –

Respuesta

5

Trate de usar el UAX29URLEmailTokenizerFactory tokenizer, que es igual que el tokenizer estándar, pero puede reconocer direcciones de correo electrónico, URL, nombres de dominio y direcciones IPv4/IPv6. Un ejemplo de la Guía de referencia Solr:

En: Visit http://accarol.com/contact.htm?from=external&a=10 or e-mail [email protected]

fuera: Visit, http://accarol.com/contact.htm?from=external&a=10, or, email, [email protected]

+0

que sonaba prometedor, pero aún no. Actualicé el esquema (arriba) eliminando el tokenizador anterior, agregando esto, SOLR reiniciado, reindexado y comprometido, pero aún obtengo los mismos resultados: espacios tras períodos en correos electrónicos y direcciones URL. –

+0

Tal vez el [WordDelimiterFilterFactory] (http://wiki.apache.org/solr/AnalyzersTokenFilesTokenFilters#solr.WordDelimiterFilterFactory) es lo que causa problemas (divide tokens en subtokens). ¿Puedes intentar deshabilitarlo (o tal vez establecer 'preserveOriginal =" 1 "')? – Chewie

+0

Intentó tanto "preserveOriginal = 1" y deshabilitándolo por completo, y obtuvo los mismos resultados. –

Cuestiones relacionadas