Zend Lucene и поиск диапазона по полю с несколькими значениями - PullRequest
0 голосов
/ 12 декабря 2011

Скажем, мой индекс содержит документы с полем "возраст".Пример записи для поля "возраст":

  • 25
  • 24, 28
  • 25, 31

Как мне сделать запросчтобы я получил все документы, чьи поля содержат возраст от 20 до 30 лет?Я использую Zend Lucene.

1 Ответ

1 голос
/ 12 декабря 2011

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.
Это все равно, что заставить Люцен работать над итоговыми результатами

...