我有一个要与Zend_Search_Lucene
结合使用的数据库。但是,我很难为Lucene创建“完全可搜索”的文档。
每个Zend_Search_Lucene
文档从两个关系数据库表(Table_One
和Table_Two
)中提取信息。 Table_One
具有基本信息(id
,owner_id
,title
,description
,location
等),Table_Two
与Table_One
具有1:N的关系(意味着,对于每个条目)在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_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.
接下来,我需要能够在
bedrooms
,bathrooms
,price_min
和price_max
字段上进行范围查询。 (例如:查找具有1至3个卧室的文档)Zend_Search_Lucene
仅允许在同一字段上进行远程搜索。据我了解,这意味着我要对其进行范围查询的每个字段只能包含一个值(例如:bedrooms:“ 1 bedroom”);我现在在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
字段进行范围查询,还是每个范围查询字段仅包含一个值(例如“一间卧室”)?我无法使范围查询以其当前形式工作。我在这里不知所措。提前致谢。
最佳答案
我建议您为Table_Two中的每个条目创建一个单独的Lucene文档。这将导致这些条目共有的Table_One信息重复,但这对于在Lucene中轻松得多的索引结构要付出高昂的代价。
使用boolean query组合多个range queries。数值字段应该是这样的:bedrooms: 3
price_min: 900
使用Lucene语法的示例查询将是:
date_available:[20100101 TO 20100301] AND price_min:[600 TO 1000]
关于zend-framework - zend搜索lucene,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1053039/