Zend Lucene和具有多个值的字段上的范围搜索

时间:2011-12-12 03:46:53

标签: lucene zend-lucene

假设我的索引包含一个名为“ages”的字段的文档。 “年龄”字段的示例条目:

  • 25
  • 24,28
  • 25,31

我如何查询这个以便我获得其字段包含年龄在20到30之间的所有文档?我正在使用Zend Lucene。

1 个答案:

答案 0 :(得分:1)

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

您可以使用其他字段,
喜欢: -

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处理摘要结果