說我的索引包含帶有一個名爲「ages」的字段的文檔。對於 「年齡」 字段的示例條目:Zend在具有多個值的字段上搜索Lucene和範圍
- 24,28
- 25,31
我將如何查詢,這樣我得到的所有的字段中包含歲之間的文件20和30?我正在使用Zend Lucene。
說我的索引包含帶有一個名爲「ages」的字段的文檔。對於 「年齡」 字段的示例條目: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);
雙方的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來的總結工作成果
這將工作的樂趣,儘管「時代「包含1個或更多值的字段? – StackOverflowNewbie
是多值時代? – ajreal
它應該仍然工作(至少在我的例子中工作正常) – ajreal
如果使用純Lucene的查詢,就這麼簡單'年齡:20〜30]',具有與Zend-lucene的 – ajreal