2010-01-29 3 views
2

J'ai besoin de partitionner mon index SOLR en deux moitiés. Comme il se trouve, j'ai déjà un champ STRING qui représente les informations de partition dont j'ai besoin. En d'autres termes, un type d'enregistrement à rechercher est celui où le champ chaîne est présent dans l'enregistrement et contient une valeur, l'autre type est celui où il ne contient aucune valeur. Toutes les requêtes doivent spécifier la partition à rechercher. Serait-il plus rapide pour moi de rechercher ce champ en utilisant une requête de champ négative, comme -strFld:[* TO *] ou serait-il mieux/plus rapide pour moi de créer un nouveau champ booléen, appelez-le dire "hasStrFld", et rechercher sur cela? Ainsi, lorsque strFld n'est pas présent, hasStrFld est faux. De même, quand il y a des données dans StrFld alors hasStrFld est vrai. Autres considérations: il y a une très faible probabilité qu'à l'avenir l'index puisse être partitionné en une troisième partition, ce qui rendrait les requêtes booléennes inadaptées et négatives inadaptées, et considérerait un champ avec des valeurs énumérées. Cependant, la probabilité est assez faible et la performance rapide aujourd'hui est une considération beaucoup plus grande que l'extensibilité pour demain.Question de conception de schéma SOLR: absence de champ ou champ booléen?

Répondre

3

Je pense en pratique que je pourrais envisager d'exécuter quelques tests avant de décider, cependant, sans eux, j'aurais probablement recours au champ STRING.

  • il est déjà là
  • il n'y a pas une telle chose comme un champ spécial booléenne (Solr ajoute ce jeton en utilisant une chaîne pour autant que je comprends).

Pour la vitesse, je voudrais essayer:

  • en utilisant comme filtre (c.-à-fq) d'utiliser des mécanismes de mise en cache associés
  • boost/unboost le score sur le terrain et trier (au lieu de partitionnement complètement)
  • une approche multi-cœur, partitions en noyaux (en fait cela pourrait être facile à étendre et facile à entretenir)

Hope this aide s.

Questions connexes