Zend Lucene и поиск диапазона по полю с несколькими значениями
Скажем, мой индекс содержит документы с полем "возраст". Пример записи для поля "возраст":
- 25
- 24, 28
- 25, 31
Как я могу запросить это, чтобы получить все документы, поля которых содержат возраст от 20 до 30 лет? Я использую Zend Lucene.
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
И 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
,
Это все равно, что сказать Люцену работать над итоговыми результатами.