说我的索引包含了一个名为“年龄”字段的文件。 例如,对于“年龄”字段中的条目:
- 25
- 24,28
- 25,31
我将如何查询这让我得到的所有的字段中包含20和30岁之间的文件? 我使用Zend的Lucene。
说我的索引包含了一个名为“年龄”字段的文件。 例如,对于“年龄”字段中的条目:
我将如何查询这让我得到的所有的字段中包含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);
文档: - http://framework.zend.com/manual/en/zend.search.lucene.query-api.html#zend.search.lucene.queries.range
双方的Lucene和Solr支持多值。
对于你的情况,你没有标准化的数据非常好。
重新分配的年龄字段作为多值,
范围查询以匹配的多值的值中的一个。
这意味着
20,29 <-- matched
20,31 <-- matched
30,31 <-- does not matched
如果您需要20之间的所有值相匹配30,
20,21,30 <-- matched
19,21,30 <-- not matched
您可以使用其他领域(S)
喜欢 :-
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来对汇总结果工作