Frage

Ich habe eine Datenbank, die ich mit Zend_Search_Lucene nutzen möchte. Aber ich habe Schwierigkeiten ein „vollständig durchsuchbare“ Dokument für Lucene zu schaffen.

Jedes Zend_Search_Lucene Dokument zieht Informationen aus zwei Tabellen relationaler Datenbanken (Table_One und Table_Two). Table_One hat grundlegende Informationen (id, owner_id, title, description, location, etc.), hat Table_Two eine 1: n-Beziehung (das heißt, für jeden Eintrag in Table_One, könnte es ein oder mehr Einträge in Table_One sein) Table_Two. Table_Two enthält: id, listing_id, bedrooms, bathrooms, price_min, price_max, date_available. Siehe Abbildung 1.

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)

Das Problem ist, gibt es mehrere Table_Two Einträge für jeden Table_One Eintrag. [Frage 1] Wie ein Zend_Search_Lucene Dokument erstellen, in dem jedes Feld eindeutig ist? (Siehe Abbildung 2)

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.

Als nächstes muss ich der Lage sein, ein Range-Abfrage auf den bedrooms, bathrooms, price_min und price_max Felder zu tun. (Beispiel: Dokumente zu finden, die zwischen 1 und 3 Schlafzimmer haben) Zend_Search_Lucene nur reichte erlauben sucht auf dem gleichen Feld. Von meinem Verständnis bedeutet dies jedes Feld ich auf eine Fern Abfrage tun will nur einen Wert enthalten kann (Beispiel: Schlafzimmer: „1 Schlafzimmer“);

Was habe ich jetzt, im Lucene Dokument ist die bedrooms, bathrooms, price_min, price_max, date_available Felder Raum begrenzt ist.

Beispiel:

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 

Beispiel 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"

[Frage 2] Können Sie ein Range-Abfrage-Suche auf dem bedroom, bathroom, price_min, price_max, date_available Felder, wie sie oben dargestellt sind oder tut jeder Bereich Abfragefeld nur einen Wert enthalten haben (zB „1 Schlafzimmer“) ? Ich habe nicht in der Lage, die Bereichsabfrage an der Arbeit in seiner jetzigen Form zu erhalten. Ich bin an einem verlieren hier.

Vielen Dank im Voraus.

War es hilfreich?

Lösung

  1. Ich schlage vor, Sie ein separates Dokument Lucene in Table_Two für jeden Eintrag erstellen. Dies wird einige Duplizierung der Table_One Informationen gemeinsam diese Einträge verursacht, aber das ist nicht ein hoher Preis für viele einfache Indexstruktur in Lucene zu zahlen.
  2. Verwenden Sie ein boolean Abfrage kombinieren mehrere Bereichsabfragen . Die Zahl bewerten Felder sollten wie folgt sein:

bedrooms: 3

price_min: 900

und eine Beispielabfrage in Lucene Syntax wird:

date_available:[20100101 TO 20100301] AND price_min:[600 TO 1000]
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top