假设我的索引包含一个名为“ages”的字段的文档。“年龄”字段的示例条目:
- 25
- 24、28
- 25、31
我将如何查询这个,以便我获得字段包含 20 到 30 岁之间的所有文档?我正在使用 Zend Lucene。
假设我的索引包含一个名为“ages”的字段的文档。“年龄”字段的示例条目:
我将如何查询这个,以便我获得字段包含 20 到 30 岁之间的所有文档?我正在使用 Zend Lucene。
lmgtfy :-
$from = new Zend_Search_Lucene_Index_Term(20, 'ages');
$to = new Zend_Search_Lucene_Index_Term(30, 'ages');
$query = new Zend_Search_Lucene_Search_Query_Range(
$from, $to, true // inclusive
);
$hits = $index->find($query);
lucene 和 solr 都支持多值。
对于您的情况,您没有很好地规范化数据。
将年龄字段重新分配为多值,
范围查询是匹配多值中的值之一。
这意味着
20,29 <-- matched
20,31 <-- matched
30,31 <-- does not matched
如果您需要匹配 20 到 30 之间的 ALL 值,
20,21,30 <-- matched
19,21,30 <-- not matched
您可以使用其他字段,
例如:-
age_20_30 : store 1 (when all ages are between 20 to 30), else 0
age_30_40 : store 1 (when all ages are between 30 to 40), else 0
... etc
之后,您可以更改为搜索age_20_30:1
。
这就像告诉 lucene 处理摘要结果