У меня есть база данных, которую я бы хотел использовать с Zend_Search_Lucene
. Однако мне трудно создать для Lucene документ с полной возможностью поиска.zend search lucene
Каждый документ Zend_Search_Lucene
извлекает информацию из двух таблиц реляционных баз данных (Table_One
и Table_Two
). Table_One
имеет основную информацию (id
, owner_id
, title
, description
, location
и т.д.), Table_Two
имеет 1 а: N отношение к Table_One
(значения, для каждой записи в Table_One
, не может быть один или несколько записей в Table_Two
). Таблица_Two содержит: id, listing_id
, bedrooms
, bathrooms
, price_min
, price_max
, date_available
. См Рисунок 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)
Проблема заключается в том, существует несколько Table_Two
записей для каждого Table_One
записи. [Вопрос 1] Как создать документ Zend_Search_Lucene
, где каждое поле уникально? (Смотри рисунок 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.
Далее, мне нужно, чтобы быть в состоянии сделать Range Query на полях bedrooms
, bathrooms
, price_min
и price_max
. (Пример: поиск документов, содержащих от 1 до 3 спален) Zend_Search_Lucene
разрешает только поиск в дальнем порядке в одном и том же поле. По моему мнению, это означает, что каждое поле, в котором я хочу выполнить запрос диапазона, может содержать только одно значение (пример: спальни: «1 спальня»);
То, что я сейчас, в рамках Lucene документа является bedrooms
, bathrooms
, price_min
, price_max
, date_available
полями, пробелами.
Пример:
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
Образец Lucene документа
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"
[Вопрос 2] Вы можете сделать поиск Range запрос по bedroom
, bathroom
, price_min
, price_max
, date_available
поля, как они показаны выше или каждое поле запроса диапазона должно содержать только одно значение (например, «1 спальня»)? Я не смог заставить Range Query работать в его текущей форме. Я теряюсь здесь.
Заранее спасибо.
Спасибо. Это именно то, что я сделал, и он отлично работает. Спасибо вам. – 2009-07-02 19:19:33