2010-10-29 21 views
1

Je crois savoir que les documents sont trouvés sur la base d'une requête, puis ce résultat est filtré par le filtre.Lucene.NET: requête ou filtre?

La requête est la seule qui affectera le score/la pertinence d'un document.

Y aurait-il des améliorations de performance (mise en cache) si j'interrogeais les résultats pertinents pour la pertinence et les éléments de filtre qui ne le sont pas?

Voici ma situation. J'ai beaucoup de produits, et le site cherchera souvent des produits par catégorie ou par fabricant. Je pensais utiliser des requêtes pour cela, car cela ramènerait les produits à un plus petit sous-ensemble qui peut être mis en cache. Je peux ensuite filtrer mes résultats en fonction des spécifications du produit. Dois-je utiliser des filtres pour les spécifications? De cette façon, nous pouvons filtrer sur la base d'un sous-ensemble de produits (catégorie ou fabricant) déjà mis en cache (par lucene).

Répondre

0

La différence entre filter et query est principalement que filter est exacte. Si vous filtrez sur brand=... que vous obtiendrez seulement cette marque exacte. Si vous interrogez dessus, vous obtiendrez la marque et éventuellement d'autres résultats qui correspondent également à votre requête. Donc, la question est, voulez-vous un filtre exact, ou est-ce juste pour la pertinence?

+0

BoolClause.Occur.MUST ne le rendrait-il pas exact? Que voulez-vous dire par exact? Vous voulez dire quelque chose qui produit un score de pertinence de 1 ou 0? –

+0

@Paul Knopf: oui, dans ce cas, seul le classement devrait différer. – Wolph

0

Le filtrage fournit un mécanisme pour limiter davantage les résultats d'une requête et fournir un gain de performance possible si la même requête est exécutée plusieurs fois. Nous utilisons principalement des filtres pour la sécurité - cela fournirait des gains de performance à mesure que les résultats de la requête seraient mis en cache.

1

L'utilisation de filtres n'affecte pas non plus le score renvoyé, contrairement aux termes supplémentaires d'une requête. Vous devez utiliser des filtres, par exemple, si un utilisateur choisit une catégorie à partir d'une liste des catégories disponibles comme facettes:

  • Catégorie: Electricals
  • Termes de requête: Appareil photo reflex numérique

scores obtenu (pertinence) sont basées sur les termes de la requête autres qu'un coup sur la catégorie