2010-11-19 12 views
-1

Nous travaillons en ligne avec un modèle de recherche.demander un modèle de conception

Dans le servlet de recherche, il capture les paramètres de requête du client, puis génère une requête de recherche d'hibernation pour la recherche.

Maintenant, le problème est que les paramètres du client sont mutables!

Tous les paramètres que nous accepte sont répertoriés comme suit:

1) mot-clé.

Le (s) mot (s) clé (s) utilisé (s) pour la recherche, une requête de recherche peut être traitée même si ce paramètre est passé. exemple valide:

/search?keyword="test" 

2) lowleftX, lowleftY, upperrightX, upperrightY.

Ces quatre paramètres doivent apparaître simultanément ou jamais. Puisque ces quatre paramètres sont utilisés pour une TermRangeQuery dans lucene.Si l'un d'entre eux se produit, les trois autres doivent également se produire. Et, ces quatre paramètres peuvent se produire avec le "mot-clé" à la fois. exemple valide:

/search?lowleftX=10&lowleftY=10&upperrightX=40&upperrightY=30 
/search?lowleftX=10&lowleftY=10&upperrightX=40&upperrightY=30&keyword="test" 

3) catégorie

Ceci permet de limiter le champ de recherche (juste une recherche dans la catégorie spéciale).

4) commencer, limiter

Ces deux paramètres utilisent pour la pagination.

5) returnFields

Les returnFields qui seront retivived de l'indice (si elle est stockée dans l'index) et de retour vers le client.

Donc je n'ai aucune idée sur la façon de construire la requête en utilisant la syntaxe d'estimation (if .... else .... if ...).

Quelqu'un peut me dire comment?

Répondre

0

Je n'ai aucune idée de ce que vous entendez par "estimation de la syntaxe", mais il me semble que le point 1 -3 est la requête Lucene réelle. Vous devrez inspecter les paramètres et décider en fonction du nom et du nombre de paramètres du type de requête que vous avez. En utilisant les différentes sous-classes de Query, en particulier BooleanQuery, vous construisez ensuite une requête Lucene appropriée et vous l'utilisez pour créer un FullTextQuery Hibernate Search. Dans cette requête de texte intégral, vous spécifiez les paramètres de début et de fin. Si vous utilisez des projections pour récupérer les valeurs de champ directement à partir de l'index, vous définissez également les noms de champ projetés dans la requête de texte intégral. J'espère que cela aide un peu.