2011-12-12 69 views
0

說我的索引包含帶有一個名爲「ages」的字段的文檔。對於 「年齡」 字段的示例條目:Zend在具有多個值的字段上搜索Lucene和範圍

  • 24,28
  • 25,31

我將如何查詢,這樣我得到的所有的字段中包含歲之間的文件20和30?我正在使用Zend Lucene。

+0

如果使用純Lucene的查詢,就這麼簡單'年齡:20〜30]',具有與Zend-lucene的 – ajreal

回答

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支持多值。
對於你的情況,你沒有很好地標準化數據。
將多個年齡字段重新分配爲多值,
範圍查詢將匹配多值中的一個值。
如果你需要匹配到30 20之間的所有值,這意味着

20,29 <-- matched 
20,31 <-- matched 
30,31 <-- does not matched 

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來的總結工作成果

+0

這將工作的樂趣,儘管「時代「包含1個或更多值的字段? – StackOverflowNewbie

+0

是多值時代? – ajreal

+0

它應該仍然工作(至少在我的例子中工作正常) – ajreal