У меня есть база данных, которую я хотел бы использовать с Zend_Search_Lucene
. Однако у меня возникают трудности при создании документа с полным поиском для 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
). Table_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_One
существует несколько Table_Two
записей. [Вопрос 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 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] Можете ли вы выполнить поиск по диапазону в полях bedroom
, bathroom
, price_min
, price_max
, date_available
, как показано выше, или каждое поле запроса диапазона должно содержать только одно значение (например, «1 спальня»)? Мне не удалось заставить Range Range Query работать в его текущей форме. Я в растерянности.
Заранее спасибо.