J'ai une base de données que j'aimerais utiliser avec Zend_Search_Lucene
. Cependant, j'ai de la difficulté à créer un document «entièrement consultable» pour Lucene. Chaque document Zend_Search_Lucene
extrait des informations de deux tables de base de données relationnelles (Table_One
et Table_Two
). Table_One
a des informations de base (id
, owner_id
, title
, description
, location
, etc.), a Table_Two
1: relation N à Table_One
(ce qui signifie, pour chaque entrée Table_One
, il pourrait y avoir une ou plusieurs entrées dans Table_Two
). Le Tableau 2 contient: id, listing_id
, bedrooms
, bathrooms
, price_min
, price_max
, date_available
. Voir Figure 1.zend search lucene
Figure 1
Table_One
id (Primary Key)
owner_id
title
description
location
etc...
Table_Two
id (Primary Key)
listing_id (Foreign Key to Table_One)
bedrooms (int)
bathrooms (int)
price_min (int)
price_max (int)
date_available (datetime)
Le problème est, il y a plusieurs Table_Two
entrées pour chaque entrée Table_One
. [Question 1] Comment créer un document Zend_Search_Lucene
où chaque champ est unique? (Voir la figure 2)
Figure 2
Lucene Document
id:Keyword
owner_id:Keyword
title:UnStored
description:UnStored
location: UnStored
date_registered:Keyword
... (other Table_One information)
bedrooms: UnStored
bathrooms: UnStored
price_min: UnStored
price_max: UnStored
date_available: Keyword
bedrooms_1: <- Would prefer not to have do this as this makes the bedrooms harder to search.
Ensuite, je dois pouvoir faire une requête sur le Range bedrooms
, bathrooms
, price_min
et price_max
champs. (Exemple: trouver des documents qui ont entre 1 et 3 chambres à coucher) Zend_Search_Lucene
permettra seulement des recherches à distance sur le même champ. D'après ce que je comprends, cela signifie que chaque champ que je veux faire une requête à distance ne peut contenir qu'une seule valeur (exemple: chambres: "1 chambre");
Ce que j'ai maintenant, dans le document Lucene est le bedrooms
, bathrooms
, price_min
, price_max
, date_available
champs étant l'espace délimité.
Exemple:
Sample Table_One Entry:
| 5 | 2 | "Sample Title" | "Sample Description" | "Sample Location" | 2008-01-12
Sample Table_Two Entries:
| 10 | 5 | 3 | 1 | 900 | 1000 | 2009-10-01
| 11 | 5 | 2 | 1 | 800 | 850 | 2009-08-11
| 12 | 5 | 1 | 1 | 650 | 650 | 2009-09-15
Exemple Lucene document
id:5
owner_id:2
title: "Sample Title"
description: "Sample Description"
location: "Sample Location"
date_registered: [datetime stamp YYYY-MM-DD]
bedrooms: "3 bedroom 2 bedroom 1 bedroom"
bathrooms: "1 bathroom 1 bathroom 1 bathroom"
price_min: "900 800 650"
price_max: "1000 850 650"
date_available: "2009-10-01 2009-08-11 2009-09-15"
[Question 2] Pouvez-vous faire une requête de recherche Plage sur la bedroom
, bathroom
, price_min
, price_max
, date_available
champs tels qu'ils apparaissent ci-dessus ou est-ce que chaque champ de requête de plage doit contenir une seule valeur (par exemple "1 chambre")? Je n'ai pas réussi à faire fonctionner le Range Query sous sa forme actuelle. Je suis à perdre ici.
Merci d'avance.
Merci. C'est exactement ce que j'ai fait et cela fonctionne très bien. Merci. –