7 votes

Recherche et mise en évidence des caractères génériques avec Solr 1.4

J'ai une installation assez simple du logiciel SOLR 1.4, à l'exception de quelques petits changements de configuration et de schéma.

<requestHandler name="standard" class="solr.SearchHandler" default="true">
    <!-- default values for query parameters -->
    <lst name="defaults">
        <str name="defType">dismax</str>
        <str name="echoParams">explicit</str>
        <str name="qf">
            text
        </str>
        <str name="spellcheck.dictionary">default</str>
        <str name="spellcheck.onlyMorePopular">false</str>
        <str name="spellcheck.extendedResults">false</str>
        <str name="spellcheck.count">1</str>
    </lst>
</requestHandler>

Le principal type de champ que j'utilise pour l'indexation est le suivant :

<fieldType name="textNoHTML" class="solr.TextField" positionIncrementGap="100">
        <analyzer type="index">
            <charFilter class="solr.HTMLStripCharFilterFactory" />
            <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <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="1"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/>
        </analyzer>
        <analyzer type="query">
            <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <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="1"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/>
        </analyzer>
    </fieldType>

maintenant, lorsque je fais une recherche en utilisant

"q=search+term&hl=on"

J'obtiens une mise en évidence, et des scores précis.

MAIS, pour le wildcard, je suppose que vous devez utiliser "q.alt" ? C'est le cas ? Si c'est le cas, ma requête ressemble à ceci :

"q.alt=search*&hl=on"

Lorsque j'utilise la requête ci-dessus, la mise en évidence ne fonctionne pas, et tous les scores sont "1.0".

Qu'est-ce que je fais de travers ? Est-ce que ce que je veux est possible sans contourner certaines des optimisations vraiment cool de SOLR.

Santé !

8voto

Jimmy Points 3962

D'après ce que je sais, vous ne pouvez pas utiliser de caractères de remplacement avec le gestionnaire dismax, cf. http://wiki.apache.org/solr/DisMaxRequestHandler#q .

Pour simuler la recherche par caractères génériques, j'ai utilisé EdgeNGrams en suivant certaines des instructions données ici : http://www.lucidimagination.com/blog/2009/09/08/auto-suggest-from-popular-queries-using-edgengrams/ . En fait, je n'ai fait qu'ajouter le type de champ edgytext à schema.xml et modifier le type de champ du champ sur lequel je voulais effectuer une recherche.

J'espère que cela vous aidera !

5voto

Jem Points 491

Vous pouvez aussi prendre la dernière version de la construction nocturne et utiliser edismax (ExtendedDismaxQParser).

Il gère les caractères génériques de fin et de début.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X