Solr: à l'Aide d'un générique sur une chaîne de caractères avec des espaces blancs
J'ai le même problème que discuté ici: Solr jokers avec des espaces blancs, mais cette question n'a pas été répondu.
Je suis en utilisant un caractère générique dans un filtre de requête sur un champ appelé "marque".
Je vais avoir des ennuis lorsque le nom de la marque a des espaces dans des. Par exemple, le filtrage de la marque "Lexington" fonctionne très bien quand je dis fq={!tag=marque}marque:Lexing*n. Un multi-parole de la marque comme "Athentic Modèles" les causes des problèmes, cependant. Il semble guillemets doivent être inclus autour de le nom.
Quand il y a des "s *s ne pas faire n'importe quoi, c'est à dire de la marque:"Athentic Mode*" ou de la marque:"Lexingt*", ne correspondent à rien. Sans guillemets, c'est-à-dire de la marque:Authen*, sans guillemets et sans espace, et qui correspondent à des Modèles Authentiques. Mais une fois que l'espace est inclus dans le nom de la marque, il semble considérer seulement la chaîne jusqu'à la première place lors de l'appariement.
La marque champ est de type
<fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
qui n'est pas espace segmenté, à ma compréhension. Il est peuplé de copyField à partir d'un espace sous domaine, cependant.
Est-il quelque chose que je peux faire pour arrêter Solr à partir de la segmentation le filtre de la requête, sans l'aide de guillemets doubles?
OriginalL'auteur Jon B | 2012-09-11
Vous devez vous connecter pour publier un commentaire.
Tout comme Rob a dit dans sa réponse, j'ai posté une réponse sur mon propre sur la question, il a liés à.
Tout ce que vous devez faire est de s'échapper de l'espace dans votre requête (comme dans
customer_name:Pop *Tart
-->customer_name:Pop\ *Tart
).De mon expérience, cette méthode fonctionne quel que soit l'endroit où vous placez le générique, qui est soutenu par la façon dont Solr prétend que quelque chose comme:
Est analysée comme:
OriginalL'auteur Aubergine
Essayer de changer le type de chaîne à quelque chose comme du texte. Type de chaîne n'est pas segmenté, donc quand il y a un espace dans un champ de type chaîne, il va essayer de correspondre à votre requête, y compris les espaces dans le champ.
dans le fichier de schéma par défaut, vous pouvez voir cette ligne juste au-dessus de la chaîne de caractères de type
à l'aide d'un type de texte devrait résoudre votre problème, comme text_general ou un semblable.
J'ai essayé d'utiliser un caractère générique sur un sous domaine, et les matchs qu'il a renvoyé étaient trop permissive...quelque chose comme ne nécessitant que le premier élément de la requête correspond à un jeton dans l'index.
pour sûr, l'aide de la chaîne sur un champ que vous allez utiliser pour le filtrage ou le tri de sens que pour la performance, mais alors vous ignorez le problème d'espace.. vous pouvez faire quelques repères pour vérifier la différence de performance pour la chaîne et les champs de texte.. ou vous pouvez essayer d'autres trucs comme le tri sur les N premières lettres ou des jetons de champ, et ainsi de suite.. je ne suis pas sûr si vous pouvez définir des champs personnalisés, même s'il vaut la peine de travailler sur
Je ne suis pas tellement inquiet à propos de la performance, en fait. J'ai trouvé que la requête de filtre sur un champ de texte abouti à des parties qui n'étaient pas exactes. Par exemple, ce produit correspond pour fq:"Ma Marque" non seulement "Ma Marque", mais "Ma Marque Foo" et "Ma Marque de la Barre," etc. Je ne comprends pas tout le comportement de ce domaine, mais je crois qu'il ne sera pas répondre à mes exigences. La raison pour laquelle je suis à l'aide d'un joker, c'est parce que pour les marques avec un symbole TM, nous avons de la difficulté à les assortir à cause de l'encodage. J'aimerais remplacer TM avec un caractère générique dans la requête et à l'image du reste de la marque exactement.
pour le TM chose, vous pouvez utiliser un transformateur? vous pouvez le remplacer ou de le supprimer à partir du champ et alors vous n'avez pas besoin d'utiliser un caractère générique. et pour la correspondance sur le texte de la requête, je vous recommande de jouer les analyseurs et les filtres de l'schema.xml fichier.. si le tutoriel montant n'est pas assez belle, je pense.. vous pouvez aussi poster votre question ici: lucene.472066.n3.nabble.com/Solr-User-f472068.html c'est l'une des principales listes de solr/lucene communauté
OriginalL'auteur denizdurmus
J'ai ajouté une solution possible retour sur la question d'origine Solr jokers avec des espaces blancs
Remarque cela fonctionne UNIQUEMENT avec des caractères génériques. Je sais que cette question exemple utilise le caractère générique au sein de la chaîne, mais il sert à répondre à un cas particulier de la question au point.
Fondamentalement, il s'élève à l'aide de la FieldQParserPlugin analyseur de requête. Vérifier mon post sur la question d'origine pour plus de détails donc je n'ai pas de mépris pour me répéter.
OriginalL'auteur Rob