Есть ли способ реализовать IntRangeField в Solr? - PullRequest
0 голосов
/ 28 февраля 2012

все! Вот мой ужасный случай, спасибо за помощь! Я хочу иметь такой документ:

<doc>
    ...
    <arr name="occupiedDays"> -- multivalued range field
         <range>1 TO 10</range>
         <range>5 TO 15</range>
    </arr>
    ...
</doc>

И причина, по которой я хочу это сделать, заключается в том, что это намного легче, чем иметь все числа там, конечно. Просто чтобы прояснить, я хочу избежать этого в solr:

<doc>
    ...
    <arr name="occupiedDays"> -- multivalued int field
         <str>1</str>
         <str>2</str>
         <str>3</str>
         <str>4</str>
         <str>5</str>
         <str>6</str>
         <str>7</str>
         <str>8</str>
         <str>9</str>
         <str>10</str>
    </arr>
    ...
</doc>

И затем выполнить запросы диапазона в этом поле диапазона, например: fq = -occupiedDays: [5-30]

У кого-нибудь есть идеи? Я спрашивал и искал по всему Интернету, и кажется, что Solr не поддерживает это.

Любая помощь будет очень полезна! Спасибо заранее.

Federico

Ответы [ 2 ]

0 голосов
/ 28 февраля 2012

Почему бы вам предварительно не обработать ваши данные в сегменты и только представить окончательные результаты в SOLR.Определите фиксированное количество сегментов, увеличенное на 10 за раз, плюс один дополнительный сегмент для чисел за пределами этого диапазона.Например, у вас может быть 3 ведра по 10, которые будут 1-10, 11-20, 21-30 и одно на 31 или больше.Затем либо подсчитайте записи в каждом сегменте, увеличивая интервал на единицу для каждой записи, где ocuppiedDays попадает в интервал, или суммируйте дни, добавляя busyDays каждой записи в соответствующий интервал.Зависит от того, что вы хотите сделать с данными, и правильное решение может даже заключаться в том, чтобы сделать это обоими способами в отдельных полях.

Кстати, 1024 МБ ОЗУ не очень много, чтобы предоставить большую базу данных SOLR,Обычно SOLR сохраняет весь индекс в ОЗУ, и когда вы выполняете поисковые запросы, он также кэширует копию результирующего набора в ОЗУ, которая включает в себя все неиндексированные поля в наборе результатов.Проверьте конфигурацию кэширования в файле solrconfig.xml, поскольку вы можете кэшировать слишком много данных.Кроме того, если у вас много неиндексированных полей, рассмотрите возможность размещения этой информации в отдельном хранилище значений ключей, чтобы они не занимали ОЗУ для кэширования.

0 голосов
/ 28 февраля 2012

На самом деле у вас не так много вариантов:

  • либо вам нужно это поле для поиска , и в этом случае отображение должно быть явным (Lucene / Solr - это инвертированный индекс, что означает, что для каждого экземпляр поля, он хранит список документов, которые содержат этот экземпляр поля),

  • либо вам нужно только, чтобы это поле было сохранено , и в этом случае мой лучший совет - хранить его вне Solr.

Название вашего поля заставляет меня думать, что вы работаете над какой-то системой доступности. Вас может заинтересовать этот вопрос:

...