2010-12-13 76 views
2

J'ai un champ de texte auquel je fournis un texte normal qui contient des codes de produit (par exemple FI302010, RR220011, etc.). J'aimerais pouvoir rechercher ces numéros de produit. Je l'ai essayé dans l'outil ANALYSIS - Et ici, il semble que ce devrait être possible. Un champ de texte standard est délimité par un mot qui divise les codes de produit en "FI" et "302010" - mais tant que la même chose se produit dans la requête et l'index, cela ne devrait pas poser de problème. Quand je regarde le navigateur de schéma je ne peux pas trouver les codes de produit, mais je peux trouver quelque chose qui ressemble à une version stemmed du code (c'est-à-dire 30201 - le dernier 0 est manquant).Recherche de numéros/codes de produit dans Solr

J'ai essayé d'utiliser différents types de texte (text_ws, textTight et text) - mais aucun ne me permettra de faire la recherche.

Comment activer la recherche de texte dans le texte?

Merci

Répondre

4

On dirait que vous devez configurer ce champ pour utiliser le solr.KeywordTokenizerFactory comme tokenizer.
Comme le nom ne le dit pas vraiment, ce tokenizer traitera le champ sous-jacent comme un seul jeton, en laissant son place avec des espaces, une lettre à nombre, des transitions nombre à lettre, la ponctuation et tout (sauf si vous aussi avoir des filtres à charbon pour ceux-ci).

Je ne suis pas au courant des dernières spécificités de la configuration pour Solr mais je devine l'entrée dans le schéma pour ledit champ pourrait ressembler à quelque chose comme ça:

<fieldtype name="myProductNumberFIeld" class="solr.TextField"> 
    <analyzer> 
    <!-- can have a few filters of course --> 
    <charFilter class="solr.MappingCharFilterFactory" 
     mapping="mapping-ISOLatin1Accent.txt"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <!-- etc. --> 

    <!-- That's the main thing you need --> 
    <tokenizer class="solr.KeywordTokenizerFactory"/> 

    </analyzer> 
</fieldtype> 

Plus généralement, vous aurez envie définir un analyseur spécifique pour le numéro de produit, les numéros de pièces, les codes UPC et autres, afin d'améliorer le rappel sur ces champs car les utilisateurs ne sont pas toujours conscients du format spécifique de ces identifiants (ponctuation et autres séparateurs, le cas échéant, devrait être etc.). Le problème cependant d'avoir un analyseur différent est qu'il empêche d'associer le champ à la recherche de texte générale car à un moment précis, il ne peut y avoir qu'une seule façon de traiter la requête de l'utilisateur.

0

Cela ne fonctionne réellement qu'avec l'exemple de configuration.

En faisant le point sur Solr 1.4.1, et en exécutant l'exemple de configuration, vous pouvez voir que, comme vous l'avez dit, l'outil d'analyse montre que cela fonctionne pour un champ de texte en stock. Ensuite, pour vérifier, notez que le champ "features" dans l'exemple de schéma est de type text. Modifiez l'un des exemples de fichiers dans apache-solr-1.4.1/example/examplepledocs. Dites "monitor.xml". Ajoutez le code du produit au champ des caractéristiques d'un document. (et un espace de chaque côté)

Publiez le fichier dans Solr (à l'aide de java -jar post.jar monitor.xml). Maintenant, allez le chercher. Ça marche. Vérifiez le navigateur de schéma. Afficher tous les termes dans le champ des fonctionnalités. Notez que le nombre est là par lui-même dans un terme.

Tout fonctionne pour moi.

Vous ne savez pas ce qui est arrivé à votre navigateur de schéma, peut-être une faute de frappe? Les chiffres ne sont pas arrêtés. Ce caractère de fin est un o (lettre) pas un zéro, cela pourrait être votre problème.L'utilisation de keywordtokenizer ne vous permettra pas de trouver la partie numérique du code de produit, qui était la question initiale.