2016-09-06 1 views

Répondre

3

Cela dépend du moment où vous développez les synonymes. Si vous développez au moment de la requête, les mises à jour seront visibles sans aucune réindexation, mais si vous développez au moment de l'index (ce qui est la méthode recommandée), vous devrez réindexer pour inclure les nouveaux synonymes dans l'index .

Le raisonnement derrière recommandant l'expansion au moment de l'indice par rapport au temps d'interroger est described in the old wiki:

Ceci est parce qu'il ya deux problèmes potentiels qui peuvent arrise au moment de la requête:

Le Lucene QueryParser tokenizes sur blanc espace avant de donner du texte à l'analyseur, donc si une personne cherche les mots mer biscit, l'analyseur recevra les mots "mer" et "biscuit" séparément, et ne saura pas qu'ils correspondent à un synonyme.

La recherche de phrase ("sea biscit") forcera QueryParser à transmettre la chaîne entière à l'analyseur, mais si SynonymFilter est configuré pour développer les synonymes, alors QueryParser récupère la liste de jetons l'analyseur, il construira une MultiPhraseQuery qui n'aura pas l'effet désiré. Ceci est dû au fait que le mécanisme limité disponible pour l'analyseur indique que deux termes occupent la même position: il n'y a aucun moyen d'indiquer qu'une "phrase" occupe la même position qu'un terme. Pour notre exemple, le MultiPhraseQuery résultant serait "(sea | sea | seabiscuit) (biscuit | biscit)" qui ne correspondrait pas au cas simple de "seabiscuit" apparaissant dans un document

Même si vous n'êtes pas inquiet à propos de multi mots-synonymes, les différences d'idf font encore une bonne idée des synonymes d'index. Considérez le scénario suivant:

Un index avec un champ "texte" qui, lors de l'interrogation, utilise SynonymFilter avec le synonyme TV, Televesion et expand = "true" Plusieurs milliers de documents contenant le terme "texte: TV" Quelques centaines de documents contenant le terme «texte: Télévision» Une requête pour le texte: TV se développera dans (texte: texte TV: Télévision) et le docFreq inférieur pour le texte: La télévision donnera beaucoup les documents qui correspondent à "Télévision" beaucoup score plus élevé puis docs qui correspondent "TV" de manière comparable - ce qui peut être quelque peu contre-intuitif pour le client. L'expansion (ou la réduction) de l'index entraîne le même idf pour tous les documents, quel que soit le terme contenu dans le texte original.

Il existe une explication très détaillée de ce qui se passe réellement dans les coulisses disponibles dans Better synonym handling in Solr. Tant que vous êtes conscient de ces problèmes et du compromis, les synonymes de temps de requête peuvent fonctionner correctement, mais vous devrez les tester en fonction de vos requêtes et de vos attentes. conscient des pièges.

+0

Merci Mats. mais ré-indexer des millions d'enregistrements prend du temps peut-on réduire son temps de quelque façon? –

+2

Juste réindexer les documents affectés par vos synonymes :-) –

+0

@MatsLindh Je ne pouvais pas comprendre cette ligne "(mer | mer | seabiscuit) (biscuit | biscit)" qui ne correspondrait pas au cas simple de "seabiscuit" se produisant dans un document . Depuis "seabiscuit" est présent dans MultiPhraseQuery. – user2478236