2015-08-14 11 views
9

Ho un'istanza Solr con un componente suggeritore. Funziona bene, usando l'implementazione AnalyzingInfixLookupFactory.Costruisci suggerimenti Solr basati su frasi anziché sull'intero valore di campo

Tuttavia, desidero espandere i suggerimenti in un campo content, che può contenere molto testo. Il suggeritore trova tutti i suggerimenti, ma restituisce l'intero valore di campo, anziché solo una frase o parte di una frase.

Quindi, se voglio un suggerimento per "pippo", e il campo content contiene un testo come:..

"Mi piace molto la pizza e ciambelle Prendiamo alcuni da quell'altro posto The. foo bar place. "

Il suggerimento sarà che intero testo, invece di "Il posto foo bar". E, ovviamente, quando content sono centinaia di parole lunghe, questo non è proprio usabe.

C'è un modo per limitare il numero di parole restituite per un suggerimento?

Ecco la mia componente di ricerca:

<searchComponent name="suggest" class="solr.SuggestComponent"> 
    <lst name="suggester"> 
    <str name="name">autocomplete</str> 
    <str name="lookupImpl">AnalyzingInfixLookupFactory</str> 
    <str name="indexPath">suggestions</str> 
    <str name="dictionaryImpl">DocumentDictionaryFactory</str> 
    <str name="field">suggest</str> 
    <str name="suggestAnalyzerFieldType">text_suggest</str> 
    <str name="buildOnStartup">false</str> 
    <bool name="highlight">false</bool> 
    <str name="payloadField">label</str> 
    </lst> 
</searchComponent> 

Ed ecco il gestore della richiesta:

<requestHandler name="/suggest" class="solr.SearchHandler" startup="lazy"> 
    <lst name="defaults"> 
    <str name="suggest">true</str> 
    <str name="suggest.dictionary">autocomplete</str> 
    <str name="suggest.count">10</str> 
    </lst> 
    <arr name="components"> 
    <str>suggest</str> 
    </arr> 
</requestHandler> 

Infine, ecco il campo da cui sono derivati ​​i suggerimenti:

<fieldType name="text_suggest" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.StandardFilterFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
</fieldType> 

<field name="suggest" type="text_suggest" indexed="true" multiValued="true" stored="true"/> 

I quindi utilizzare un gruppo di <copyField> s per copiare il contenuto.

EDIT 2015-08-28

La definizione content campo è la seguente:

<fieldType name="text" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
    <charFilter class="solr.MappingCharFilterFactory" mapping="txt/mapping-ISOLatin1Accent.txt"/> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="txt/stopwords.txt" /> 
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="0" splitOnNumerics="0" preserveOriginal="1"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> 
    <filter class="solr.NGramFilterFactory" minGramSize="3" maxGramSize="25"/> 
    </analyzer> 
    <analyzer type="query"> 
    <charFilter class="solr.MappingCharFilterFactory" mapping="txt/mapping-ISOLatin1Accent.txt"/> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
</fieldType> 

<field name="content" type="text" indexed="true" stored="true" termVectors="true"/> 

EDIT 2016-09-28

Questo problema è probabilmente correlato: Is Solr SuggestComponent able to return shingles instead of whole field values?

+1

che modo il tipo di campo di contenuti assomiglia? –

+0

Domanda aggiornata di conseguenza. – wadmiraal

+0

puoi aggiungere anche alcuni dati di esempio? – YoungHobbit

risposta

1

Penso a quello che sei Si potrebbe cercare solr.ShingleFilterFactory, che consente semplicemente di limitare le dimensioni del token in base al conteggio delle parole, piuttosto che la lunghezza del testo come in solr.NGramFilterFactory che si è tentato di utilizzare.
Si prega di consultare la pagina wiki SOLR per maggiori dettagli:
https://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.ShingleFilterFactory

+0

Grazie. Lo darò un'occhiata. – wadmiraal

+0

Non sembra funzionare, sfortunatamente. Suggerisce comunque frasi molto lunghe, anziché solo frasi. – wadmiraal